我使用以下方法截取所有显示器的屏幕截图。它运行完美,但我刚刚升级到Windows 10,并且看到了一个重大问题。我得到了空白/透明区域。
使用PrtScn
的常规屏幕截图:http://i.imgur.com/QwC5N5i.png
使用我的算法:http://i.imgur.com/CukLu06.png
我的算法是从Firefox调用的,它会在5秒后截取屏幕截图。在截图时,Notepad ++很专注。
EnumDisplayDevices
CreateDC
lpszDriver
和lpszDevice
从第1步获得CreateCompatibleDC
关于第2步的结果CreateDIBSection
关于第2步的结果SelectObject
第2步结果显示第4步结果BitBlt
以下是我的代码中的WinAPI调用,它位于js-ctypes:
ostypes.API('EnumDisplayDevices')(null, iDevNum, lpDisplayDevice.address(), 0);
var hdcScreen = ostypes.API('CreateDC')(collMonInfos[s].otherInfo.lpszDriver, collMonInfos[s].otherInfo.lpszDevice, null, null);
var hdcMemoryDC = ostypes.API('CreateCompatibleDC')(hdcScreen);
var hbmp = ostypes.API('CreateDIBSection')(hdcScreen, bmi.address(), ostypes.CONST.DIB_RGB_COLORS, pixelBuffer.address(), null, 0);
var rez_SO = ostypes.API('SelectObject')(hdcMemoryDC, hbmp);
var rez_BB = ostypes.API('BitBlt')(hdcMemoryDC, 0, 0, w, h, hdcScreen, 0, 0, ostypes.CONST.SRCCOPY);
// i then draw pixelBuffer to a html5 canvas
还有其他人经历过这些空白吗?有人知道解决方案吗?