Winapi 屏幕截图算法在Win10中给出了空白区域-在所有其他Windows版本中工作良好
我使用以下方法拍摄了所有监视器的屏幕截图。它可以完美地工作,但我刚刚升级到Windows10,我发现了一个主要问题。我得到了空白/透明区域 使用Winapi 屏幕截图算法在Win10中给出了空白区域-在所有其他Windows版本中工作良好,winapi,Winapi,我使用以下方法拍摄了所有监视器的屏幕截图。它可以完美地工作,但我刚刚升级到Windows10,我发现了一个主要问题。我得到了空白/透明区域 使用PrtScn的常规屏幕截图: 使用我的算法: 我的算法细节 我的算法是从Firefox调用的,5秒后截图。在截图时,记事本++是焦点 EnumDisplayDevices CreateDC使用从步骤1获得的lpszDriver和lpszDevice CreateCompatibleDC根据步骤2的结果 CreateDIBSection关于步骤2的结果 选
PrtScn
的常规屏幕截图:
使用我的算法:
我的算法细节
我的算法是从Firefox调用的,5秒后截图。在截图时,记事本++是焦点
EnumDisplayDevices
CreateDC
使用从步骤1获得的lpszDriver
和lpszDevice
CreateCompatibleDC
根据步骤2的结果CreateDIBSection
关于步骤2的结果选择Object
步骤2的结果到步骤4的结果BitBlt
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
还有其他人经历过这些空白吗?有人知道解决方案吗?当你从普通应用程序而不是Firefox中执行此操作时会发生什么感谢@DavidHeffernan的快速回复,我已经昏倒了,时间是凌晨5点:p我不知道如何从普通应用程序执行此操作。你能告诉我如何才能尝试吗?你只需要从C++程序中调用同样的函数。哦,我没有C或C++环境,但我会下载VS2013并更新你。我认为在没有本地工具的情况下做这些事情是愚蠢的