pywin32

tech2024-10-17  15

导语


最近在研究使用py操作win32 api,刚开始学习的时候有些无趣,毕竟单个的API并没有什么大的用处,使用api能实现的东西点点鼠标也能实现。后面突发奇想,为什么不利用win32实现一个随机自动夸人的脚本,带给别人满满的快乐和暖意呢?想当初我打字很慢的时候,每一天都是在祖安元气满满又快乐的一天,为什么不把这种快乐传播给别人、让世间充满爱呢?

pywin32 操作句柄


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")

使用句柄打字


import time import win32api import win32gui,win32con key_map = { "0": 49, "1": 50, "2": 51, "3": 52, "4": 53, "5": 54, "6": 55, "7": 56, "8": 57, "9": 58, "A": 65, "B": 66, "C": 67, "D": 68, "E": 69, "F": 70, "G": 71, "H": 72, "I": 73, "J": 74, "K": 75, "L": 76, "M": 77, "N": 78, "O": 79, "P": 80, "Q": 81, "R": 82, "S": 83, "T": 84, "U": 85, "V": 86, "W": 87, "X": 88, "Y": 89, "Z": 90, "CTRL": 17 ,"ENTER": 108 } def key_down(key): """ 函数功能:按下按键 参 数:key:按键值 """ key = key.upper() vk_code = key_map[key] win32api.keybd_event(vk_code, win32api.MapVirtualKey(vk_code, 0), 0, 0) def key_up(key): """ 函数功能:抬起按键 参 数:key:按键值 """ key = key.upper() vk_code = key_map[key] win32api.keybd_event(vk_code, win32api.MapVirtualKey(vk_code, 0), win32con.KEYEVENTF_KEYUP, 0) def key_press(key): """ 函数功能:点击按键(按下并抬起) 参 数:key:按键值 """ key_down(key) time.sleep(0.02) key_up(key) def write_message(windowsname): # 获取窗口句柄 hwnd = win32gui.FindWindow(None,windowsname) # 将窗口放在前台,并激活该窗口 win32gui.SetForegroundWindow(hwnd) # 输入helloworld str = "HELLOWORLD" for s in str: key_press(s) time.sleep(1); win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0) write_message("新建文本文档.txt - 记事本")

开始夸人


上面的代码虽然可以打字,但是如果打中文比较麻烦。比较简便的方法是利用 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("沙县酒店")

最新回复(0)