获取另一个应用程序窗口的位图

时间:2012-10-19 13:37:25

标签: c# windows winapi windows-xp

尝试在Windows XP中获取另一个应用程序窗口的图像。

我可以在Windows 7中执行此操作,因为DWMRegisterThumbnail API,这可以完美地工作。但是,在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”是一个位图,目前只显示在PictureBox中。这大约运行1次/秒。

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

0 个答案:

没有答案