python库 Pywin32使用

Pywin32提供了很多访问windows的API。较重要的三个模块就是win32api、win32gui和win32con。

Pywin32安装 pip install pywin32

pywin32 api文档可参照wuxc github。

DC

DC在pywin32中是一个重要概念。windows不允许程序直接访问硬件,所有的操作都需要通过一个设备上下文环境。屏幕上的每个窗口都对应一个DC。DC相当于一个视频缓冲区,对这个缓冲区的操作,会表现在这个缓冲区对应的屏幕窗口上。

除了窗口对应的DC外,还可以自己创建DC,然后在创建的DC上面建立数据拷贝到窗口的DC上,就相当于刷新窗口的DC。

使用

我们使用pywin32激活窗口并对截图。

test.py:

import win32gui,win32ui,win32con def get_windows(windowsname,filename): # 获取窗口句柄 handle = win32gui.FindWindow(None,windowsname) # 将窗口放在前台,并激活该窗口(窗口不能最小化) win32gui.SetForegroundWindow(handle) # 获取窗口DC hdDC = win32gui.GetWindowDC(handle) # 根据句柄创建一个DC newhdDC = win32ui.CreateDCFromHandle(hdDC) # 创建一个兼容设备内存的DC saveDC = newhdDC.CreateCompatibleDC() # 创建bitmap保存图片 saveBitmap = win32ui.CreateBitmap() # 获取窗口的位置信息 left, top, right, bottom = win32gui.GetWindowRect(handle) # 窗口长宽 width = right - left height = bottom - top # bitmap初始化 saveBitmap.CreateCompatibleBitmap(newhdDC, width, height) saveDC.SelectObject(saveBitmap) saveDC.BitBlt((0, 0), (width, height), newhdDC, (0, 0), win32con.SRCCOPY) saveBitmap.SaveBitmapFile(saveDC, filename) get_windows("PyWin32","截图.png")

截图.png:

python库 Pywin32使用

获取句柄

一般句柄名称都是这个窗口的title。但很多时候我们不能准确的输入title,所以我们可以通过遍历所有窗口的句柄,然后找到自己想要的窗口句柄。

python库 Pywin32使用

getHandles.py:

import win32gui hwnd_title = dict() def get_all_hwnd(hwnd, mouse): if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd): hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)}) win32gui.EnumWindows(get_all_hwnd, 0) for h, t in hwnd_title.items(): if t is not "": print(h, t)

python库 Pywin32使用

结合上一篇的pywinio我们就可以实现一些自动化的东西

打开文档输入helloworld并保存关闭。

import time import win32gui,win32con import keyboardEmulation as ke def get_windows(windowsname,filename): # 获取窗口句柄 hwnd = win32gui.FindWindow(None,windowsname) # 将窗口放在前台,并激活该窗口 win32gui.SetForegroundWindow(hwnd) # 输入helloworld scancodes = [0x23, 0x12, 0x26, 0x26, 0x18, 0x11, 0x18, 0x13, 0x26, 0x20, 0x2a] for code in scancodes: ke.key_press(code) # 保存 ke.key_down(0x1d) ke.key_down(0x1f) ke.key_up(0x1d) ke.key_up(0x1f) # 关闭窗口 time.sleep(1); win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0) get_windows("新建文本文档 (2).txt - 记事本","截图.png")

python库 Pywin32使用

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfgxf.html