用python操作windows应用程序

时间:2024-02-24 20:02:56

今天要实现的是,打开或连接一个记事本

向记事本里输入内容

然后复制粘贴

查看记事本

对文字放大并还原

替换所有文字

保存

 

from pywinauto import application
from pywinauto.keyboard import send_keys
import pyautogui
import subprocess
import re
#获取notepad的pid
def get_pid(app):
    cmd="tasklist | findstr {}".format(app)
    res=subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    ret_val=res.stdout.readlines()[0].decode()
    print(ret_val)
    pid=re.findall(r"{}.*?(\d+)".format(app),ret_val)
    print("Get {} pid : {}".format(app,pid[0]))
    return int(pid[0])
# 方式一:创建应用程序时可以,指定应用程序的合适的backend,start方法中指定启动的应用程序
#app = application.Application(backend=\'win32\').start(\'notepad.exe\')

# 方式二:查看要打开的程序进程号,通过process指定进程号连接

app = application.Application().connect(process=get_pid("notepad"))

# 方式一 :不适用于窗口名为中文的
#wind_1 = app.窗口名

# 方式二 :窗口名可以为中文
#wind_2 = app["窗口名"]

# 案例使用:选择上面打开的计算器程序窗口
wind_calc = app[\'无标题 - 记事本\']
print(wind_calc.print_control_identifiers())

edit = app[\'无标题 - 记事本\']

edit.type_keys("柠檬班")
edit.type_keys("python自动化")
edit.type_keys("musen")
#全选
send_keys("^a")
#复制
send_keys("^c")
#粘贴
send_keys("^v")
#回车
send_keys("{VK_RETURN}")
send_keys("^v")
send_keys("{VK_RETURN}")
send_keys("^v")
#按住home键
pyautogui.keyDown(\'home\')
pyautogui.keyUp(\'home\')

print(wind_calc.menu())
def list_menu(menu_item, space):
    \'\'\'
     作用:递归法遍历菜单
    \'\'\'
    for i in menu_item.items():
        if(len(i.text()) > 0):
            print(space + i.text())
        if(i.sub_menu() != None):
            list_menu(i.sub_menu(), "    " + space)

list_menu(wind_calc.menu(), "")

wind_calc.menu_select("帮助->关于记事本")

send_keys("{VK_RETURN}")

wind_calc.menu_select("查看->缩放->放大")
wind_calc.menu_select("查看->缩放->放大")
wind_calc.menu_select("查看->缩放->放大")
wind_calc.menu_select("查看->缩放->放大")
wind_calc.menu_select("查看->缩放->&恢复默认缩放")

wind_calc.menu_select("编辑->替换(&R)")
pyautogui.write("python")
pyautogui.press("tab")
pyautogui.write("C laguange")
pyautogui.press("tab")
pyautogui.press("tab")
pyautogui.press("tab")
pyautogui.press("tab")
pyautogui.press("tab")
pyautogui.keyDown("enter")
pyautogui.keyDown("esc")

wind_calc.menu_select("文件->保存(&S)")
pyautogui.write("my_pywinauto")
pyautogui.keyDown("enter")
# pyautogui.keyDown("enter")
notepad.exe                  11228 Console                    2     35,060 K

Get notepad pid : 11228
Control Identifiers:

Notepad - \'*无标题 - 记事本\'    (L189, T54, R1214, B579)
[\'*无标题 - 记事本\', \'Notepad\', \'*无标题 - 记事本Notepad\']
child_window(title="*无标题 - 记事本", class_name="Notepad")
   | 
   | Edit - \'柠檬班python自动化musen\r\n柠檬班python自动化musen\r\n柠檬班python自动化musen\'    (L197, T105, R1206, B549)
   | [\'Edit\', \'*无标题 - 记事本Edit\']
   | child_window(title="柠檬班python自动化musen\r\n柠檬班python自动化musen\r\n柠檬班python自动化musen", class_name="Edit")
   | 
   | StatusBar - \'\'    (L197, T549, R1206, B571)
   | [\'*无标题 - 记事本StatusBar\', \'StatusBar Windows (CRLF)\', \'StatusBar  第 3 行,第 1 列\', \'StatusBar\', \'StatusBar 100%\', \'StatusBar UTF-8\']
   | child_window(class_name="msctls_statusbar32")
None
<Menu 2689599>
文件(&F)
    新建(&N)    Ctrl+N
    新窗口(&W)    Ctrl+Shift+N
    打开(&O)...    Ctrl+O
    保存(&S)    Ctrl+S
    另存为(&A)...    Ctrl+Shift+S
    页面设置(&U)...
    打印(&P)...    Ctrl+P
    退出(&X)
编辑(&E)
    撤消(&U)    Ctrl+Z
    剪切(&T)    Ctrl+X
    复制(&C)    Ctrl+C
    粘贴(&P)    Ctrl+V
    删除(&L)    Del
    &使用 Bing 搜索...    Ctrl+E
    查找(&F)...    Ctrl+F
    查找下一个(&N)    F3
    查找上一个(&V)    Shift+F3
    替换(&R)...    Ctrl+H
    转到(&G)...    Ctrl+G
    全选(&A)    Ctrl+A
    时间/日期(&D)    F5
格式(&O)
    自动换行(&W)
    字体(&F)...
查看(&V)
    缩放(&Z)
        放大(&I)    Ctrl + 加号
        缩小(&O)    Ctrl + 减号
        &恢复默认缩放    Ctrl+0
    状态栏(&S)
帮助(&H)
    查看帮助(&H)
    发送反馈(&F)
    关于记事本(&A)

参考:https://www.jb51.net/article/187508.htm