小编Ima*_*mac的帖子

BitBlt屏幕截图无法在Windows 10上运行

我正在使用此代码在后台捕获进程窗口:

IntPtr = Process.GetProcessByName("memu")[0].MainWindowHandle;
RECT rc;
GetClientRect(hwnd, out rc);

IntPtr hdcFrom = GetDC(hwnd);
IntPtr hdcTo = CreateCompatibleDC(hdcFrom);

int Width = rc.right;
int Height = rc.bottom;

Bitmap bmp = null;

IntPtr hBitmap = CreateCompatibleBitmap(hdcFrom, Width, Height);
if (hBitmap != IntPtr.Zero) {
   IntPtr hLocalBitmap = SelectObject(hdcTo, hBitmap);

   BitBlt(hdcTo, 0, 0, Width, Height, hdcFrom, 0, 0, CopyPixelOperation.SourceCopy);
   SelectObject(hdcTo, hLocalBitmap);

   DeleteDC(hdcTo);
   ReleaseDC(hwnd, hdcFrom);

   bmp = Image.FromHbitmap(hBitmap);
   DeleteObject(hBitmap);
   return bmp;
}
Run Code Online (Sandbox Code Playgroud)

这段代码捕获了一个名为MEmu的Android模拟器,它使用DirectX来呈现内容.但是这个代码在Windows 10更新到16299版之后停止工作(之前它正常工作),它仍然在启用了Aero模式的Windows 7上运行.

当我在Windows 10 Pro v16299.X中使用此方法时,它只返回一个白色图像,或者它返回模拟器"加载屏幕",而不是正在运行的内容.在Windows 7上,如果我删除Aero模式,它将采取相同的行动,捕获"加载屏幕",因此看起来像新的Windows 10专业版更新中的透明度工作方式.

我已经尝试了一切,尝试安装一些模块以强制Aero Mode在Windows 10上工作,尝试使用PrintWindow在后台捕获屏幕,但仍然是相同的.

有什么想法会发生什么?还是可能的解决方案?或者在最后一个可能破坏该代码的Windows 10 …

c# windows windows-10

24
推荐指数
1
解决办法
1558
查看次数

标签 统计

c# ×1

windows ×1

windows-10 ×1