gpt4 book ai didi

winapi - 捕获隐藏或最小化的窗口

转载 作者:行者123 更新时间:2023-12-04 08:01:17 25 4
gpt4 key购买 nike

我遵循了这个tutorial(比这里列出的内容多了一点,因为在我的代码中我通过鼠标单击获得了一个窗口),将一个窗口作为位图获取,然后将该位图渲染到另一个窗口中。

我的问题:

当窗口最小化或隐藏时(SW_HIDE),我的屏幕截图不起作用,是否可以在窗口最小化或隐藏时捕获窗口?

最佳答案

PrintWindow API效果很好,我用它来捕获隐藏窗口的缩略图。尽管名称不同,但它与WM_PRINT和WM_PRINTCLIENT有所不同,除Direct X/WPF窗口外,它几乎可用于每个窗口。

我添加了一些代码(C#),但是在回顾了代码的使用方式之后,我意识到当我捕获其位图时,该窗口实际上并未隐藏,它只是在屏幕外,因此这可能不适用于您的情况。您可以在屏幕外显示该窗口,进行打印,然后再次将其隐藏吗?

        public static Bitmap PrintWindow(IntPtr hwnd)
{
RECT rc;
WinUserApi.GetWindowRect(hwnd, out rc);

Bitmap bmp = new Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb);
Graphics gfxBmp = Graphics.FromImage(bmp);
IntPtr hdcBitmap = gfxBmp.GetHdc();
bool succeeded = WinUserApi.PrintWindow(hwnd, hdcBitmap, 0);
gfxBmp.ReleaseHdc(hdcBitmap);
if (!succeeded)
{
gfxBmp.FillRectangle(new SolidBrush(Color.Gray), new Rectangle(Point.Empty, bmp.Size));
}
IntPtr hRgn = WinGdiApi.CreateRectRgn(0, 0, 0, 0);
WinUserApi.GetWindowRgn(hwnd, hRgn);
Region region = Region.FromHrgn(hRgn);
if (!region.IsEmpty(gfxBmp))
{
gfxBmp.ExcludeClip(region);
gfxBmp.Clear(Color.Transparent);
}
gfxBmp.Dispose();
return bmp;
}

关于winapi - 捕获隐藏或最小化的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/830359/

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