gpt4 book ai didi

c++ - 将 PrintWindow 转换为 BitBlt 以捕获特定窗口的屏幕截图

转载 作者:可可西里 更新时间:2023-11-01 09:33:25 29 4
gpt4 key购买 nike

我有一个 C++ 程序可以捕获特定窗口的屏幕截图并使用以下代码保存

 int main()
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

RECT rc;
HWND hwnd = FindWindow(NULL,TEXT("Window Title Here"));
if(hwnd == NULL)
{
cout<<"Can't Find Window";
return 0;
}

GetClientRect(hwnd,&rc);

HDC hdcscreen = GetDC(NULL);
HDC hdc = CreateCompatibleDC(hdcscreen);

HBITMAP hbmp = CreateCompatibleBitmap(hdcscreen,rc.right - rc.left,rc.bottom - rc.top);

SelectObject(hdc,hbmp);

PrintWindow(hwnd,hdc,NULL);

BitmapToJpg(hbmp,rc.right - rc.left,rc.bottom-rc.top); //Function to convert hbmp bitmap to jpg

DeleteDC(hdc);
DeleteObject(hbmp);
ReleaseDC(NULL,hdcscreen);
}

此代码适用于许多窗口,但对于某些窗口,输出是具有正确宽度和高度的黑色图像。通过搜索,我找到了使用 BitBlt() 的解决方案。但我不知道如何用 BitBlt() 替换 PrintWindow() 并输出到 HBITMAP。帮助需求

最佳答案

首先,将 hdcscreen 替换为 hdcwnd,您可以使用 GetDC(hwnd) 而不是 GetDC(NULL)。它可能不会改变任何东西,但它已经足够了,即使使用 PrintWindow()
然后,只需替换:

PrintWindow(hwnd,hdc,NULL);

作者:

BitBlt( hdc, 0, 0, rc.right - rc.left,rc.bottom-rc.top, hdcwnd, 0, 0, SRCCOPY );

关于c++ - 将 PrintWindow 转换为 BitBlt 以捕获特定窗口的屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31532878/

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