用python操作windows應用程序


今天要實現的是,打開或連接一個記事本

向記事本里輸入內容

然后復制粘貼

查看記事本

對文字放大並還原

替換所有文字

保存

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM