windows操作
目前很多流行的脚本工具(例如:按键精灵)都是模拟鼠标键盘操作实现一些简单的操作,比如重复点击一个地方,或者重复实现几个按键按下等,截取相应窗口界面保存。
Python 要实现操作鼠标和键盘需要pywin32库支持。
简单实现
pywin32
如果要了解更多功能,请查看pywin32技术文档。
import time
import win32gui, win32ui, win32con, win32api
def window_capture(filename):
"""
函数功能:截屏
"""
hwnd = 0 # 窗口的编号,0号表示当前活跃窗口
# 根据窗口句柄获取窗口的设备上下文DC(Divice Context)
hwndDC = win32gui.GetWindowDC(hwnd)
# 根据窗口的DC获取mfcDC
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
# mfcDC创建可兼容的DC
saveDC = mfcDC.CreateCompatibleDC()
# 创建bigmap准备保存图片
saveBitMap = win32ui.CreateBitmap()
# 获取监控器信息
MoniterDev = win32api.EnumDisplayMonitors(None, None)
w = MoniterDev[0][2][2]
h = MoniterDev[0][2][3]
# print w,h #图片大小
# 为bitmap开辟空间
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
# 高度saveDC,将截图保存到saveBitmap中
saveDC.SelectObject(saveBitMap)
# 截取从左上角(0,0)长宽为(w,h)的图片,存储空间,图片偏移量,win32操作
saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)
saveBitMap.SaveBitmapFile(saveDC, filename)
def move(x, y):
"""
函数功能:移动鼠标到指定位置
参 数:x:x坐标
y:y坐标
"""
win32api.SetCursorPos((x, y))
def get_cur_pos():
"""
函数功能:获取当前鼠标坐标
"""
p={
"x":0,"y":0}
pos = win32gui.GetCursorPos()
p['x']=pos[0]
p['y']=pos[1]
return p
def left_click():
"""
函数功能:鼠标左键点击
"""
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def right_click():
"""
函数功能:鼠标右键点击
"""
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN | win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
def left_down():
"""
函数功能:鼠标左键按下
"""
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
def left_up():
"""
函数功能:鼠标左键抬起
"""
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def right_down():
"""
函数功能:鼠标右键按下
"""
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
def right_up():
"""
函数功能:鼠标右键抬起
"""
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
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)})
if __name__ == "__main__":
win32gui.EnumWindows(get_all_hwnd, 0)
for h,t in hwnd_title.items():
if t is not "":
print(h, t)
window_capture("test.jpg")
while 1:
p = get_cur_pos()
print(p)
PyUserInput
需要PyUserInput库支持。
# pip install PyUserInput
from pykeyboard import *
from pymouse import *
# 模拟键盘输入
k = PyKeyboard()
k.type_string('123456')
k.tap_key('a')
# 模拟键盘移动和点击
m = PyMouse()
m.move(0,0)
for i in range(1920):
for j in range (1080):
m.move(i,j)
m.click(1900,10,1,1)