最近在研究使用py操作win32 api,刚开始学习的时候有些无趣,毕竟单个的API并没有什么大的用处,使用api能实现的东西点点鼠标也能实现。后面突发奇想,为什么不利用win32实现一个随机自动夸人的脚本,带给别人满满的快乐和暖意呢?想当初我打字很慢的时候,每一天都是在祖安元气满满又快乐的一天,为什么不把这种快乐传播给别人、让世间充满爱呢?
Pywin32提供了很多访问windows的API。 较重要的三个模块就是win32api、win32gui和win32con。
windows不允许程序直接访问硬件,需要通过每个窗口对应的DC来操作。 需要注意的是,获得窗口时要输入准确的title。如果不想输入,可以使用遍历取想要的窗口。
例:使用pywin32截图:
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")上面的代码虽然可以打字,但是如果打中文比较麻烦。比较简便的方法是利用 pyperclip 来复制粘贴中文。
# 安装pyperclip pip install pyperclip安装完成后,我们就可以使用python夸人了,让朋友们尽早感受到我们的友善和爱~:
import time import win32api import win32gui,win32con import random import pyautogui import pyperclip def send_message(windowsname): # 获取窗口句柄 hwnd = win32gui.FindWindow(None,windowsname) # 将窗口放在前台,并激活该窗口 win32gui.SetForegroundWindow(hwnd) scancodes = ['你真帅呀','你真可爱','你真友善'] # 夸人的时候次数要多一点,爱才会满人间 for i in range(100): pyperclip.copy(random.choice(scancodes)) pyautogui.hotkey('ctrl', 'v') pyautogui.hotkey('enter') time.sleep(0.1) # 关闭窗口 #time.sleep(1); #win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0) send_message("沙县酒店")