看清楚,我让修改的是截取其他程序窗口的部分
时间: 2024-03-14 07:43:05 浏览: 21
非常抱歉,我之前的回答仍然不正确。在 Windows 平台上,如果要截取其他程序的窗口,可以使用以下代码:
```
HWND hwnd = FindWindow(NULL, "窗口标题");
HDC hdcWindow = GetDC(hwnd);
HDC hdcMemDC = CreateCompatibleDC(hdcWindow);
RECT rect;
GetClientRect(hwnd, &rect);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
HBITMAP hbmScreen = CreateCompatibleBitmap(hdcWindow, width, height);
HBITMAP hbmOldBitmap = (HBITMAP)SelectObject(hdcMemDC, hbmScreen);
PrintWindow(hwnd, hdcMemDC, PW_CLIENTONLY);
BITMAP bmpScreen;
GetObject(hbmScreen, sizeof(BITMAP), &bmpScreen);
BITMAPINFOHEADER bi;
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bmpScreen.bmWidth;
bi.biHeight = bmpScreen.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = 32;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
BYTE *pBits = new BYTE[bmpScreen.bmWidth * bmpScreen.bmHeight * 4];
GetDIBits(hdcMemDC, hbmScreen, 0, bmpScreen.bmHeight, pBits, (BITMAPINFO*)&bi, DIB_RGB_COLORS);
QImage image(pBits, bmpScreen.bmWidth, bmpScreen.bmHeight, QImage::Format_ARGB32);
QPixmap pixmap = QPixmap::fromImage(image);
pixmap.save("screenshot.png");
SelectObject(hdcMemDC, hbmOldBitmap);
DeleteObject(hbmScreen);
DeleteDC(hdcMemDC);
ReleaseDC(hwnd, hdcWindow);
```
这段代码通过 FindWindow 函数找到指定窗口的句柄,然后创建一个和窗口设备上下文兼容的位图,并将窗口的内容复制到位图中。接着,我们将位图转换成 QPixmap,并将其保存为一个 PNG 文件。请注意,如果要截取的窗口是一个子窗口,可以使用 GetWindowRect 函数来获取子窗口相对于父窗口的位置,并使用 PrintWindow 函数截取子窗口的内容。此外,需要注意的是,这种方法需要管理员权限,并且可能会受到一些安全软件的阻止。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)