【发布时间】:2011-10-13 05:07:24
【问题描述】:
我在 Windows XP 上,我正在尝试捕获一个窗口。
但是当我捕获一个窗口时,我得到了窗口标题(名称和图标),但窗口的整个内容都是黑色的。
当试图保存图像时,整个图像是透明的。
这是我的代码:
[DllImport("User32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr handle, ref Rectangle rect);
public void CaptureWindow(IntPtr handle)
{
Rectangle rect = new Rectangle();
GetWindowRect(handle, ref rect);
rect.Width = rect.Width - rect.X;
rect.Height = rect.Height - rect.Y;
try
{
Bitmap bmp = new Bitmap(rect.Width, rect.Height);
Graphics memoryGraphics = Graphics.FromImage(bmp);
IntPtr hdc = memoryGraphics.GetHdc();
PrintWindow(handle, hdc, 0);
ResultsPB.Image = bmp;
memoryGraphics.ReleaseHdc(hdc);
}
catch (Exception)
{
throw;
}
}
【问题讨论】:
-
我会推荐 bitblt pinvoke.net/default.aspx/gdi32/BitBlt.html
-
很好,但我需要它来玩游戏,我记得 PrintWindow 适用于游戏(在 XP 中)。我想我只需要 PrintWindow 的正确代码。我不能使用你的方法,因为 GetWindowDC() 在我正在尝试的游戏中返回 null。
-
游戏可能使用 DirectX 或 OpenGL。要捕获这些屏幕,您必须使用 DirectX/OpenGL 捕获屏幕。
-
好吧,我该怎么做? (而且我不确定这是要走的路,因为我什至可以使用 printscreen 捕获它)
标签: c# screen-capture graphic gdi