截图算法在Win10中给出了空白区域 - 在所有其他Windows版本中都运行良好

时间:2015-11-28 15:23:20

标签: winapi

我使用以下方法截取所有显示器的屏幕截图。它运行完美,但我刚刚升级到Windows 10,并且看到了一个重大问题。我得到了空白/透明区域。

使用PrtScn的常规屏幕截图:http://i.imgur.com/QwC5N5i.png

使用我的算法:http://i.imgur.com/CukLu06.png

我的算法详情

我的算法是从Firefox调用的,它会在5秒后截取屏幕截图。在截图时,Notepad ++很专注。

  1. EnumDisplayDevices
  2. CreateDC lpszDriverlpszDevice从第1步获得
  3. CreateCompatibleDC关于第2步的结果
  4. CreateDIBSection关于第2步的结果
  5. SelectObject第2步结果显示第4步结果
  6. BitBlt
  7. 以下是我的代码中的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
    

    还有其他人经历过这些空白吗?有人知道解决方案吗?

0 个答案:

没有答案