pywinauto
11
总安装量
9
周安装量
#28122
全站排名
安装命令
npx skills add https://github.com/malue-ai/dazee-small --skill pywinauto
Agent 安装分布
trae
9
gemini-cli
9
github-copilot
9
codex
9
windsurf
9
kiro-cli
9
Skill 文档
Windows UI èªå¨åï¼pywinautoï¼
éè¿ pywinauto æä½ä»»æ Windows æ¡é¢åºç¨ï¼åç°çªå£ãæ£æ¥æ§ä»¶ãç¹å»æé®ãè¾å ¥æåã读åå å®¹ã æ¯æä¸¤ç§å端ï¼Win32 APIï¼ä¼ ç»åºç¨ï¼å MS UI Automationï¼ç°ä»£åºç¨ï¼ã
使ç¨åºæ¯
- ç¨æ·è¯´ã帮æå¨ XX åºç¨éç¹ä¸ä¸é£ä¸ªæé®ããèªå¨å¡«ä¸ä¸è¿ä¸ªè¡¨åã
- éè¦æä½æ²¡æ API çæ¡é¢åºç¨ï¼å¦ ERP ç³»ç»ãå é¨ç®¡çç³»ç»ï¼
- éè¦æ¹éæä½ GUI åºç¨ï¼å¦èªå¨å½å ¥æ°æ®ï¼
- éè¦è¯»åå ¶ä»åºç¨çé¢ä¸çæåå 容
åç«¯éæ©
| å端 | åæ° | éç¨åºç¨ |
|---|---|---|
| Win32 API | backend="win32" |
MFCãVB6ãVCLãç®å WinForms |
| MS UI Automation | backend="uia" |
WinFormsãWPFãUWP Store åºç¨ãQt5ãæµè§å¨ |
ä¸ç¡®å®ç¨åªä¸ªæ¶ï¼ä¼å
å°è¯ uiaï¼å¦ææ¾ä¸å°æ§ä»¶ï¼åæ¢ä¸º win32ã
å½ä»¤åè
è¿æ¥å°å·²æåºç¨
from pywinauto import Application
# æ¹å¼ 1ï¼éè¿çªå£æ é¢è¿æ¥
app = Application(backend="uia").connect(title="è®°äºæ¬", timeout=10)
# æ¹å¼ 2ï¼éè¿è¿ç¨åè¿æ¥
app = Application(backend="uia").connect(path="notepad.exe")
# æ¹å¼ 3ï¼éè¿è¿ç¨ ID è¿æ¥
app = Application(backend="uia").connect(process=12345)
å¯å¨æ°åºç¨
from pywinauto import Application
app = Application(backend="uia").start("notepad.exe")
# çå¾
çªå£åºç°
app.window(title_re=".*è®°äºæ¬.*").wait("ready", timeout=10)
åç°çªå£åæ§ä»¶
# ååºææé¡¶å±çªå£
from pywinauto import Desktop
windows = Desktop(backend="uia").windows()
for w in windows:
print(f"{w.window_text()} â {w.class_name()}")
# æå°çªå£æ§ä»¶æ ï¼è°è¯ç¨ï¼
dlg = app.window(title_re=".*è®°äºæ¬.*")
dlg.print_control_identifiers()
ç¹å»æé®åèå
dlg = app.window(title="è®°äºæ¬")
# ç¹å»èå
dlg.menu_select("æä»¶->æå¼")
# ç¹å»æé®ï¼éè¿ææ¬å¹é
ï¼
dlg.child_window(title="ç¡®å®", control_type="Button").click()
# ç¹å»æé®ï¼éè¿ auto_idï¼
dlg.child_window(auto_id="btnSubmit").click()
è¾å ¥æå
dlg = app.window(title="è®°äºæ¬")
# è¾å
¥å°ç¼è¾æ¡
edit = dlg.child_window(control_type="Edit")
edit.set_text("è¦è¾å
¥çå
容")
# 模æé®çè¾å
¥ï¼æ¯æç¹æ®é®ï¼
edit.type_keys("Hello{ENTER}World", with_spaces=True)
# ç¹æ®é®ï¼{ENTER} {TAB} {ESC} {DELETE} {BACKSPACE}
# 修饰é®ï¼^ = Ctrl, % = Alt, + = Shift
# ä¾ï¼Ctrl+A = ^a, Ctrl+Shift+S = ^+s
读åçé¢å 容
dlg = app.window(title="è®°äºæ¬")
# è¯»åææ¬æ¡å
容
content = dlg.child_window(control_type="Edit").window_text()
# 读åå表项
listbox = dlg.child_window(control_type="List")
items = [item.window_text() for item in listbox.children()]
# 读åè¡¨æ ¼
table = dlg.child_window(control_type="Table")
for row in table.children():
cells = [c.window_text() for c in row.children()]
print(" | ".join(cells))
çå¾ ä¸åæ¥
# çå¾
çªå£åºç°
dlg = app.window(title="ä¿å").wait("visible", timeout=10)
# çå¾
çªå£æ¶å¤±
app.window(title="å è½½ä¸...").wait_not("visible", timeout=30)
# çå¾
æ§ä»¶å¯ç¨
dlg.child_window(title="æäº¤").wait("enabled", timeout=5)
çªå£ç®¡ç
dlg = app.window(title="è®°äºæ¬")
# æå¤§å / æå°å / è¿å
dlg.maximize()
dlg.minimize()
dlg.restore()
# ç§»å¨åè°æ´å¤§å°
dlg.move_window(x=100, y=100, width=800, height=600)
# 置顶
dlg.set_focus()
# å
³é
dlg.close()
æ»å¨
from pywinauto import mouse
# å䏿»å¨ 3 æ ¼ï¼å¨æå®åæ ä½ç½®ï¼
mouse.scroll(coords=(500, 400), wheel_dist=-3)
# å䏿»å¨ 5 æ ¼
mouse.scroll(coords=(500, 400), wheel_dist=5)
# 卿§ä»¶å
æ»å¨ï¼å
è·åæ§ä»¶ä½ç½®ï¼
rect = dlg.child_window(control_type="List").rectangle()
mouse.scroll(coords=(rect.mid_point()), wheel_dist=-3)
é¼ æ åæ æä½
from pywinauto import mouse
# ç§»å¨é¼ æ å°åæ
mouse.move(coords=(500, 300))
# 卿å®åæ å·¦é®ç¹å»
mouse.click(coords=(500, 300))
# å³é®ç¹å»
mouse.right_click(coords=(500, 300))
# åå»
mouse.double_click(coords=(500, 300))
ææ½
from pywinauto import mouse
# ææ½ï¼ä» (100,200) å° (300,400)
mouse.press(coords=(100, 200))
mouse.move(coords=(300, 400))
mouse.release(coords=(300, 400))
å ¸å工使µ
1. ç¨ Desktop().windows() ååºå½åæå¼ççªå£
2. ç¨ app.connect() è¿æ¥å°ç®æ åºç¨
3. ç¨ dlg.print_control_identifiers() æ¥çæ§ä»¶æ
4. æ ¹æ®æ§ä»¶ç±»åå屿§å®ä½ç®æ å
ç´
5. æ§è¡æä½ï¼click / set_text / type_keys / scrollï¼
6. 读åç»ææçå¾
æä½å®æ
å®å ¨è§å
- æä½åå¿ é¡» HITL 确认ï¼åç¥ç¨æ·å³å°æä½åªä¸ªåºç¨çåªä¸ªæ§ä»¶
- ä¸èªå¨å ³éç¨æ·ææ¡£ï¼ä¸è°ç¨æªä¿åææ¡£ç close()
- 䏿ä½ç®¡çåçªå£ï¼è·³è¿ UAC å¼¹çªåç³»ç»è®¾ç½®
- æä½å¤±è´¥æ¶æªå¾åé¦ï¼è®©ç¨æ·çå°å½åçé¢ç¶æ
- æ¯æ¥æä½é´é 0.5 ç§ï¼é¿å æä½è¿å¿«å¯¼è´ UI æ¥ä¸åååº