1

试图在 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/秒。

有没有更有吸引力/更简单的方法来做我正在做的事情?

4

0 回答 0