python自动化工具之pywinauto(一个实例)结合pyuserinput
以下是pywinauto使用指南。这个窗口句柄可以在Spy++中查看 (Microsoft Spy++(查看窗口句柄) 10.00.30319 官方最新绿色版)
二、pyuserinput使用方法
//导入模块 import pymouse,pykeyboard,os,sys from pymouse import * from pykeyboard import PyKeyboard //分别定义一个实例 m = PyMouse() k = PyKeyboard() 鼠标操作: m.click(x,y,button,n) –鼠标点击 x,y –是坐标位置 buttong –1表示左键,2表示点击右键 n –点击次数,默认是1次,2表示双击 m.move(x,y) –鼠标移动到坐标(x,y) x_dim, y_dim = m.screen_size() –获得屏幕尺寸 键盘操作: k.type_string(‘Hello, World!’) –模拟键盘输入字符串 k.press_key(‘H’) –模拟键盘按H键 k.release_key(‘H’) –模拟键盘松开H键 k.tap_key(“H”) –模拟点击H键 k.tap_key(‘H’,n=2,interval=5) –模拟点击H键,2次,每次间隔5秒 k.tap_key(k.function_keys[5]) –点击功能键F5 k.tap_key(k.numpad_keys[5],3) –点击小键盘5,3次 联合按键模拟 例如同时按alt+tab键盘 k.press_key(k.alt_key) –按住alt键 k.tap_key(k.tab_key) –点击tab键 k.release_key(k.alt_key) –松开alt键
======
以下是记事本操作实例。
1 #! /usr/bin/env python 2 3 4 ''' 5 FuncName: johnny-pywinauto.py 6 Desc: study pywinauto 7 Date: 2016-10-10 14:30 8 Author: johnny 9 Home:http://blog.csdn.net/z_johnny 10 ''' 11 12 from pywinauto import application 13 from pykeyboard import PyKeyboard 14 import time 15 16 class Pywin(object): 17 """ 18 pywin framwork main class 19 tool_name : 程序名称,支持带路径 20 windows_name : 窗口名字 21 """ 22 SLEEP_TIME = 1 23 24 def __init__(self): 25 """ 26 初始化方法,初始化一个app 27 """ 28 self.app = application.Application() 29 30 def run(self, tool_name): 31 """ 32 启动应用程序 33 """ 34 35 self.app.start(tool_name) 36 time.sleep(1) 37 38 def connect(self, window_name): 39 """ 40 连接应用程序 41 app.connect_(path = r"c:\windows\system32\notepad.exe") 42 app.connect_(process = 2341) 43 app.connect_(handle = 0x010f0c) 44 """ 45 self.app.connect(title = window_name) 46 time.sleep(1) 47 48 def close(self, window_name): 49 """ 50 关闭应用程序 51 """ 52 self.app[window_name].Close() 53 time.sleep(1) 54 55 def max_window(self, window_name): 56 """ 57 最大化窗口 58 """ 59 self.app[window_name].Maximize() 60 time.sleep(1) 61 62 def menu_click(self, window_name, menulist): 63 """ 64 菜单点击 65 """ 66 self.app[window_name].MenuSelect(menulist) 67 time.sleep(1) 68 69 def input(self, window_name, controller, content): 70 """ 71 输入内容 72 """ 73 self.app[window_name][controller].TypeKeys(content) 74 time.sleep(1) 75 76 def click(self, window_name, controller): 77 """ 78 鼠标左键点击 79 example: 80 下面两个功能相同,下面支持正则表达式 81 app[u'关于“记事本”'][u'确定'].Click() 82 app.window_(title_re = u'关于“记事本”').window_(title_re = u'确定').Click() 83 """ 84 self.app[window_name][controller].Click() 85 time.sleep(1) 86 87 def double_click(self, window_name, controller, x = 0,y = 0): 88 """ 89 鼠标左键点击(双击) 90 """ 91 self.app[window_name][controller].DoubleClick(button = "left", pressed = "", coords = (x, y)) 92 time.sleep(1) 93 94 def right_click(self, window_name, controller, order): 95 """ 96 鼠标右键点击,下移进行菜单选择 97 window_name : 窗口名 98 controller:区域名 99 order : 数字,第几个命令 100 """ 101 self.app[window_name][controller].RightClick() 102 k = PyKeyboard() 103 for down in range(order): 104 k.press_key(k.down_key) 105 time.sleep(0.5) 106 k.press_key(k.enter_key) 107 time.sleep(1) 108 109 if __name__ == "__main__": 110 app = Pywin() 111 # 记事本例子 112 tool_name = "notepad.exe" 113 # 通过Spy++ 获取window_name,即标题文本 114 window_name = u"无标题 - 记事本" 115 menulist = u"帮助->关于记事本" 116 # 通过Spy++ 获取controller,即窗口类名 117 controller = "Edit" 118 content = u"johnny" 119 window_name_new = content + ".txt" 120 # 启动程序,记事本只能开一个 121 app.run(tool_name) 122 123 app.connect(window_name) 124 125 # app.max_window(window_name) 126 app.menu_click(window_name,menulist) 127 app.click(u'关于记事本', u'确定') 128 app.input(window_name,controller,content) 129 # Ctrl + a 全选 130 app.input(window_name,controller,"^a") 131 # 选择复制 132 app.right_click(window_name,controller,3) 133 #选择粘贴 134 app.right_click(window_name,controller,4) 135 k=PyKeyboard() 136 k.press_key(k.enter_key) 137 # Ctrl + v 粘贴 138 app.input(window_name,controller,"^v") 139 # Ctrl + s 保存 140 app.input(window_name,controller,"^s") 141 # 输入文件名 142 app.input(u"另存为",controller,content) 143 # 保存 144 app.click(u"另存为","Button") 145 try: 146 app.click(u"确认另存为","Button") 147 except: 148 pass 149 finally: 150 app.close(window_name_new)
知识无穷尽也。