gpt4 book ai didi

C# PrintWindow 返回黑色图像

转载 作者:行者123 更新时间:2023-12-05 04:18:56 31 4
gpt4 key购买 nike

我在 Windows XP 上,我正在 try catch 一个窗口。

但是当我捕获一个窗口时,我得到了窗口标题(名称和图标)但是窗口的整个内容都是黑色的。

当试图保存图片时,整个图片是透明的。

这是我的代码:

    [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;
}
}

最佳答案

C# Capturing Direct 3D Screen .打印屏幕捕获可见区域,而不是句柄。

DirectX 和 OpenGL 直接通过硬件绘制。使用 PrintScreen,您只能捕获由 Windows 管理绘制的句柄屏幕。

如果您只需要可见区域,请使用 Graphics.CaptureFromScreen。

我尝试了 BitBlt 和 PrintScreen 以及来自 http://magnum.dimajix.de/download/demos.shtml 的 OpenGL 演示没有成功。 PrintScreen 只返回一个空白位图,而 BitBlt 返回一个旧的捕获(可能来自第一个也是唯一一个 WM_PAINT 消息)。

只需尝试启动您的游戏并收听它的窗口消息。您将看到没有 WM_PAINT 消息。所以 Windows 甚至不知道是否有任何更改。

关于C# PrintWindow 返回黑色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6827066/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com