zoukankan      html  css  js  c++  java
  • python自动化工具之pywinauto(一个实例)结合pyuserinput

    以下是pywinauto使用指南。这个窗口句柄可以在Spy++中查看 Microsoft Spy++(查看窗口句柄) 10.00.30319 官方最新绿色版

    python自动化工具之pywinauto(一)

    python自动化工具之pywinauto(二)

    python自动化工具之pywinauto(三)

    二、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:windowssystem32
    otepad.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)
  • 相关阅读:
    unsupported jsonb version number 123
    如何在MPlayer上支持RTSP
    TDengine 时序数据库的 ADO.Net Core 提供程序 Maikebing.EntityFrameworkCore.Taos
    如何使用IoTSharp对接ModBus?
    如何从源码启动和编译IoTSharp
    Asp.Net Core 自动适应Windows服务、Linux服务、手动启动时的内容路径的扩展方法
    MQTTnet 的Asp.Net Core 认证事件的扩展
    Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)
    The remote certificate is invalid according to the validation procedure 远程证书验证无效
    settings插拔式源码
  • 原文地址:https://www.cnblogs.com/mapu/p/9235587.html
Copyright © 2011-2022 走看看