试图在 Windows XP 中获取另一个应用程序窗口的图像。
由于 DWMRegisterThumbnail API,我可以在 Windows 7 中执行此操作,并且可以完美运行。但是,在 Windows XP 中没有 DWM api,因此我依赖 PrintWindow。
此应用程序为每个“菜单”打开新窗口(每次按下其 UI 上的按钮时),因此您必须重新枚举其所有窗口以找到最新的窗口(事实上,FindWindow 无论如何都会返回最新的窗口)。但是,它确实在某些时候崩溃了,可能是因为我的应用程序仍然有一个旧窗口的句柄?
这是我当前的代码:
if (garminHwnd == IntPtr.Zero)
return;
garminHwnd = FindWindow("CDP_FIELD_WND", String.Empty);
IntPtr hdc = GetWindowDC(garminHwnd);
if (hdc != IntPtr.Zero)
{
Graphics memoryGraphics = Graphics.FromImage(bmp);
IntPtr dc = memoryGraphics.GetHdc();
bool success = PrintWindow(garminHwnd, dc, 0);
memoryGraphics.ReleaseHdc(dc);
}
“bmp”是一个位图,目前只显示在一个图片框中。这运行大约 1/秒。
有没有更有吸引力/更简单的方法来做我正在做的事情?