首頁 > 軟體

Python利用pywin32實現自動操作電腦

2022-11-23 14:00:52

1. 簡介

在windows系統上,重複性的操作可以用Python指令碼來完成,其中常用的模組是win32gui、win32con、win32api,要使用這三個模組需要先安裝pywin32。在cmd中輸入如下命令,即可安裝pywin32:

pip install pywin32

這三個模組作用如下:

win32gui:模組定義了Windows下關於圖形操作的API,如查詢視窗控制程式碼的函數FindWindow和FindWindowEx;

win32con:模組內定義了Windows API內的宏;

win32api:win32api為Microsoft 32位元平臺的應用程式程式設計介面,可以模擬按鍵操作。

2. 範例程式碼

以自動在記事本中輸入文字為例,說明如何利用這三個模組進行自動化辦公

import win32gui
import win32con
import win32api
import time

ret = win32api.ShellExecute(1, 'open', 'D:\test.txt', '', '', 1)
print('正在開啟軟體...')
time.sleep(2)
handle = win32gui.FindWindow(None,'test.txt - 記事本')
handleEdit = win32gui.FindWindowEx(handle, None, 'EDIT', None)

menu = win32gui.GetMenu(handle)
subMenu = win32gui.GetSubMenu(menu, 0)

mystring=['北國風光,千里冰封,萬里雪飄。',
'望長城內外,惟餘莽莽;大河上下,頓失滔滔。',
'山舞銀蛇,原馳蠟象,欲與天公試比高。',
'須晴日,看紅裝素裹,分外妖嬈。',
'江山如此多嬌,引無數英雄競折腰。',
'惜秦皇漢武,略輸文采;唐宗宋祖,稍遜風騷。',
'一代天驕,成吉思汗,只識彎弓射大雕。',
'俱往矣,數風流人物,還看今朝。','《沁園春·雪》']
for index, i in enumerate(mystring):
    for ch in i:
        print(ch)
        win32gui.SendMessage(handleEdit, win32con.WM_CHAR, ord(ch), 0)
        time.sleep(0.05)

    # 模擬按下確認鍵的操作
    win32api.keybd_event(13, 0, 0, 0)
    time.sleep(0.05)
    win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)

#獲取儲存按鈕
cmdId=win32gui.GetMenuItemID(subMenu, 3)
#點選儲存
win32gui.PostMessage(handle, win32con.WM_COMMAND, cmdId, 0)
#關閉視窗
win32gui.PostMessage(handle, win32con.WM_CLOSE, 0, 0)

3. 效果圖

4. 程式碼解釋

1.win32api.ShellExecute(1, 'open', 'D:\test.txt', '', '', 1)表示開啟D槽目錄下的test.txt檔案。

2.time.sleep(2)有的檔案開啟比較慢,所以這裡等待2秒

3.win32gui.FindWindow(None,'test.txt - 記事本')查詢視窗控制程式碼,這裡是根據視窗的標題來查詢視窗的控制程式碼,第二個引數值要與標題完全一致,如下圖

4.win32gui.FindWindowEx(handle, None, 'EDIT', None)用第3步找到的控制程式碼查詢輸入的視窗,這裡視窗對應的引數是’EDIT’,換一個軟體可能就不是’EDIT’

5.subMenu = win32gui.GetSubMenu(menu, 0)查詢視窗對應的選單,後面儲存檔案會用到

6.win32gui.SendMessage(handleEdit, win32con.WM_CHAR, ord(ch), 0)向輸入的視窗寫入字元ord(ch)

7.win32api.keybd_event(13, 0, 0, 0)寫完一行後,模擬鍵盤輸入Enter鍵,Enter鍵對應的鍵值是13,這行程式碼錶示按鍵按下

8.win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)這行程式碼錶示Enter鍵鍵鬆開

9.cmdId=win32gui.GetMenuItemID(subMenu, 3)根據第5步的子選單獲取儲存按鈕的索引值,如下圖所示,從0開始計數,儲存正好是第3個

10.win32gui.PostMessage(handle, win32con.WM_COMMAND, cmdId, 0)發生儲存訊息

11.win32gui.PostMessage(handle, win32con.WM_CLOSE, 0, 0)發生關閉視窗訊息

按照這樣的程式設計流程,就實現了自動開啟test.txt檔案,並自動輸入預置的文字內容,輸入完成後自動儲存並關閉視窗,從而實現了自動化辦公。

5. 常見問題

win32api.ShellExecute(1, 'open', 'D:\test.txt', '', '', 1)這行程式碼用預設的程式開啟檔案,如果你設定預設開啟程式不是記事本,那本程式碼無法自動輸入文字到test.txt中

在自動輸入文字時,需要保證記事本視窗獲得輸入焦點,否則程式無法按照預期執行。

到此這篇關於Python利用pywin32實現自動操作電腦的文章就介紹到這了,更多相關Python pywin32操作電腦內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com