利用这个函数获取指定窗口截图
时间: 2023-08-24 17:06:36 浏览: 206
要获取指定窗口的截图,你可以使用 `win32gui.FindWindow` 找到窗口句柄,然后使用 `win32gui.GetWindowRect` 获取窗口的位置和大小信息,最后使用 `PIL`(Python Imaging Library)来进行截图操作。以下是一个示例代码:
```python
import win32gui
import win32con
import win32ui
from PIL import Image
def capture_window(window_title):
# 查找窗口句柄
hwnd = win32gui.FindWindow(None, window_title)
if hwnd == 0:
print("未找到指定窗口")
return None
# 获取窗口位置和大小信息
window_rect = win32gui.GetWindowRect(hwnd)
left, top, right, bottom = window_rect
# 创建设备上下文
hwnd_dc = win32gui.GetWindowDC(hwnd)
mfc_dc = win32ui.CreateDCFromHandle(hwnd_dc)
save_dc = mfc_dc.CreateCompatibleDC()
# 创建位图对象
width = right - left
height = bottom - top
save_bitmap = win32ui.CreateBitmap()
save_bitmap.CreateCompatibleBitmap(mfc_dc, width, height)
# 将截图保存到位图对象中
save_dc.SelectObject(save_bitmap)
save_dc.BitBlt((0, 0), (width, height), mfc_dc, (0, 0), win32con.SRCCOPY)
# 将位图转换为 PIL 图像对象
bmp_info = save_bitmap.GetInfo()
bmp_str = save_bitmap.GetBitmapBits(True)
image = Image.frombuffer(
"RGB",
(bmp_info["bmWidth"], bmp_info["bmHeight"]),
bmp_str,
"raw",
"BGRX",
0,
1
)
# 释放资源
win32gui.DeleteObject(save_bitmap.GetHandle())
save_dc.DeleteDC()
mfc_dc.DeleteDC()
win32gui.ReleaseDC(hwnd, hwnd_dc)
return image
# 示例用法
window_title = "指定窗口标题"
screenshot = capture_window(window_title)
if screenshot:
screenshot.save("window_screenshot.png")
print("截图已保存")
```
在上述代码中,你需要将 `window_title` 替换为你要截图的窗口的标题。截图将保存为当前目录下的 `window_screenshot.png` 文件。请确保安装了相应的依赖库,可以使用 `pip install pywin32 pillow` 安装所需的库。
阅读全文