ðª PyGetWindowã«ãããŠã£ã³ããŠæäœ
ð ã¯ããã«
PyGetWindowã¯ããã¹ã¯ãããäžã§éããŠãããŠã£ã³ããŠãPythonããæ€çŽ¢ã»ååŸã»æäœããããã®ã©ã€ãã©ãªã§ãã
äŸãã°ã次ã®ãããªåŠçãå®è¡ã§ããŸãã
- éããŠãããŠã£ã³ããŠã®äžèЧãååŸãã
- ãŠã£ã³ããŠã¿ã€ãã«ããå¯Ÿè±¡ãæ¢ã
- çŸåšã¢ã¯ãã£ããªãŠã£ã³ããŠãååŸãã
- 察象ãŠã£ã³ããŠãåé¢ãžç§»åãã
- æå°åã»æå€§åã»åŸ©å ãè¡ã
- ãŠã£ã³ããŠãç§»åãã
- ãŠã£ã³ããŠãµã€ãºã倿Žãã
- ãŠã£ã³ããŠãéãã
PyAutoGUIãããŠã¹ãããŒããŒããæäœããã©ã€ãã©ãªã§ããã®ã«å¯ŸããPyGetWindowã¯ãŠã£ã³ããŠãã®ãã®ãæ¢ããããäœçœ®ãç¶æ ã倿Žãããããããã«äœ¿çšããŸãã
äž¡è ãçµã¿åãããããšã§ã察象ãŠã£ã³ããŠãèªåçã«æ¢ããŠåé¢ãžè¡šç€ºãããã®äžãPyAutoGUIã§æäœã§ããŸãã
ãã®èšäºã§ã¯Windowsç°å¢ã察象ã«èª¬æããŸããPyGetWindowã¯ã¯ãã¹ãã©ãããã©ãŒã ãå¿åããŠäœãããŠããŸãããå ¬åŒçã§ã¯Windowsåãã®æ©èœãäžå¿ã§ãã
ð§ PyGetWindowã®åœ¹å²
GUIèªååã§ã¯ãæäœãå§ããåã«å¯Ÿè±¡ã¢ããªã±ãŒã·ã§ã³ãåé¢ãžè¡šç€ºããå¿ èŠããããŸãã
äŸãã°PyAutoGUIã§æ¬¡ã®ã³ãŒããå®è¡ãããšãçŸåšã¢ã¯ãã£ããªãŠã£ã³ããŠã«å¯ŸããŠããŒå ¥åãéãããŸãã
import pyautogui
pyautogui.write("Hello")
察象ã®ãã©ãŠã¶ã§ã¯ãªãããšãã£ã¿ãŒãã¿ãŒããã«ãã¢ã¯ãã£ãã«ãªã£ãŠããã°ããã¡ããžæåãå ¥åãããŠããŸããŸãã
ããã§PyGetWindowã䜿çšãã
- 察象ãŠã£ã³ããŠãæ¢ã
- æå°åãããŠããã°åŸ©å ãã
- 察象ãŠã£ã³ããŠãåé¢ãžè¡šç€ºãã
- PyAutoGUIã§æäœãã
ãšããæµããäœããŸãã
PyGetWindow
â
察象ãŠã£ã³ããŠãæ¢ã
â
åé¢ãžè¡šç€ºãã
â
PyAutoGUI
â
ã¯ãªãã¯ãããŒå
¥åãè¡ã
PyGetWindowãšPyAutoGUIãçµã¿åããããšããå®è¡åã«å¯Ÿè±¡ã¢ããªãæäœæ¥ã§éžæããŠããããšããåæãæžãããŸãã
ðŠ ã€ã³ã¹ããŒã«
PyGetWindowã¯pipã§ã€ã³ã¹ããŒã«ã§ããŸãã
pip install pygetwindow
Windowsã§Python Launcherã䜿çšããå Žåã¯ã次ã®ããã«å®è¡ã§ããŸãã
py -m pip install pygetwindow
ä»®æ³ç°å¢ã䜿çšããŠããå Žåã¯ãä»®æ³ç°å¢ãæå¹åããŠããã€ã³ã¹ããŒã«ããŸãã
.venv\Scripts\activate
python -m pip install pygetwindow
ð ã€ã³ã¹ããŒã«ã確èªãã
ã€ã³ã¹ããŒã«åŸãPythonããã€ã³ããŒãã§ããã確èªããŸãã
import pygetwindow
print("PyGetWindowãå©çšã§ããŸãã")
ãšã©ãŒã衚瀺ãããªããã°ãã€ã³ã¹ããŒã«ã¯å®äºããŠããŸãã
éåžžã¯ã次ã®ããã«çãååãä»ããŠã€ã³ããŒãããŸãã
import pygetwindow as gw
ãã®èšäºã§ã¯ã以éãã®æžãæ¹ã䜿çšããŸãã
ð éããŠãããŠã£ã³ããŠã®ã¿ã€ãã«ãååŸãã
çŸåšéããŠãããŠã£ã³ããŠã®ã¿ã€ãã«äžèЧã¯getAllTitles()ã§ååŸã§ããŸãã
import pygetwindow as gw
titles = gw.getAllTitles()
for title in titles:
print(title)
å®è¡ãããšã次ã®ãããªã¿ã€ãã«ã衚瀺ãããŸãã
BookStack - Google Chrome
ã¡ã¢åž³
Windows PowerShell
ãšã¯ã¹ãããŒã©ãŒ
ã¿ã€ãã«ã空æååã«ãªã£ãŠãããŠã£ã³ããŠãå«ãŸããå ŽåããããŸãã
空ã®ã¿ã€ãã«ãé€å€ããã«ã¯ã次ã®ããã«ããŸãã
import pygetwindow as gw
for title in gw.getAllTitles():
if title:
print(title)
ãã©ãŠã¶ã®ãŠã£ã³ããŠã¿ã€ãã«ã«ã¯ãéåžžãçŸåšè¡šç€ºããŠããããŒãžã®ã¿ã€ãã«ãšãã©ãŠã¶åãå«ãŸããŸãã
ðïž ãã¹ãŠã®ãŠã£ã³ããŠãååŸãã
getAllWindows()ã䜿çšãããšããŠã£ã³ããŠã¿ã€ãã«ã ãã§ãªãããŠã£ã³ããŠãæäœããããã®ãªããžã§ã¯ããååŸã§ããŸãã
import pygetwindow as gw
windows = gw.getAllWindows()
for window in windows:
print(window)
åãŠã£ã³ããŠã®ã¿ã€ãã«ã衚瀺ããå Žåã¯ãtitleãåç
§ããŸãã
import pygetwindow as gw
for window in gw.getAllWindows():
if window.title:
print(window.title)
ãŠã£ã³ããŠãªããžã§ã¯ããååŸãããšãäœçœ®ããµã€ãºã®ç¢ºèªãåé¢è¡šç€ºãç§»åãªã©ãå¯èœã«ãªããŸãã
ð ã¿ã€ãã«ãããŠã£ã³ããŠãæ¢ã
ã¿ã€ãã«ã«ç¹å®ã®æååãå«ããŠã£ã³ããŠã¯getWindowsWithTitle()ã§æ€çŽ¢ã§ããŸãã
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"Google Chrome"
)
print(windows)
çµæã¯ãªã¹ããšããŠè¿ãããŸãã
察象ã1ä»¶èŠã€ãã£ãå Žåã§ãããªã¹ãããåãåºãå¿ èŠããããŸãã
window = windows[0]
getWindowsWithTitle()ã®çµæãå¿ ãååšãããšã¯éããŸããããªã¹ãã®å é ãåãåºãåã«ã察象ãèŠã€ãã£ãã確èªããŠãã ããã
â ãŠã£ã³ããŠãèŠã€ãã£ãã確èªãã
å®å šã«ååŸããåºæ¬åœ¢ã¯æ¬¡ã®ãšããã§ãã
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"Google Chrome"
)
if not windows:
print(
"察象ã®ãŠã£ã³ããŠã"
"èŠã€ãããŸããã§ããã"
)
else:
window = windows[0]
print(
f"èŠã€ãããŸãã: "
f"{window.title}"
)
察象ãèŠã€ãããªãå Žåã«åŠçãäžæ¢ãããªããäŸå€ãçºçãããæ¹æ³ããããŸãã
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"Google Chrome"
)
if not windows:
raise RuntimeError(
"察象ã®ãŠã£ã³ããŠã"
"èŠã€ãããŸããã§ããã"
)
window = windows[0]
ð ãã©ãŠã¶ã®ããŒãžã¿ã€ãã«ã§æ¢ã
ãã©ãŠã¶ã®ã¿ã€ãã«ã«ã¯ãçŸåšéããŠããããŒãžã®ã¿ã€ãã«ãå«ãŸããŸãã
äŸãã°BookStackãéããŠããå Žåãæ¬¡ã®ãããªã¿ã€ãã«ã«ãªã£ãŠããããšããããŸãã
BookStack - Google Chrome
ãã®å Žåã¯ãããŒãžåã䜿ã£ãŠæ€çŽ¢ã§ããŸãã
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"BookStack"
)
ãã©ãŠã¶åã§ã¯ãªãããŒãžåã䜿ãããšã§ãè€æ°ã®ChromeãŠã£ã³ããŠããç®çã®ããŒãžãéžã³ããããªããŸãã
ç¹å®ã®WebããŒãžãæäœããå Žåã¯ããGoogle Chromeãã§ã¯ãªããããŒãžã¿ã€ãã«ã«å«ãŸããåºæã®æååã§æ€çŽ¢ãããšå¯Ÿè±¡ãçµã蟌ããŸãã
â ïž ã¿ããšãŠã£ã³ããŠã®éã
PyGetWindowãååŸããã®ã¯ããã©ãŠã¶ã®ã¿ãã§ã¯ãªãWindowsäžã®ãŠã£ã³ããŠã§ãã
1ã€ã®ChromeãŠã£ã³ããŠã«è€æ°ã®ã¿ããéããŠããå ŽåãPyGetWindowãã確èªã§ããã®ã¯ãçŸåšéžæãããŠããã¿ãã®ããŒãžã¿ã€ãã«ã ãã§ãã
äŸãã°ã次ã®2ã€ã®ã¿ããåããŠã£ã³ããŠã§éããŠãããšããŸãã
- BookStack
- Googleæ€çŽ¢
Googleæ€çŽ¢ã®ã¿ããéžæãããŠããå ŽåããŠã£ã³ããŠã¿ã€ãã«ã«ã¯BookStackãå«ãŸããªããããæ¬¡ã®æ€çŽ¢ã§ã¯èŠã€ãããªãå¯èœæ§ããããŸãã
gw.getWindowsWithTitle(
"BookStack"
)
PyGetWindowã§ã¯ãã©ãŠã¶å éšã®ã¿ããçŽæ¥æ€çŽ¢ã»éžæã§ããŸãããã¿ããæäœããå Žåã¯ãPyAutoGUIã®ã·ã§ãŒãã«ããããŒããPlaywrightãªã©ã®ãã©ãŠã¶èªååããŒã«ã䜿çšããŸãã
ð¯ çŸåšã¢ã¯ãã£ããªãŠã£ã³ããŠãååŸãã
çŸåšã¢ã¯ãã£ããªãŠã£ã³ããŠã¯getActiveWindow()ã§ååŸã§ããŸãã
import pygetwindow as gw
window = gw.getActiveWindow()
print(window.title)
ã¿ã€ãã«ã ããååŸããå Žåã¯getActiveWindowTitle()ã䜿çšã§ããŸãã
import pygetwindow as gw
title = gw.getActiveWindowTitle()
print(title)
ããã«ãããPyAutoGUIã§æäœãéå§ããåã«ãæåŸ ãããŠã£ã³ããŠãã¢ã¯ãã£ãã確èªã§ããŸãã
import pygetwindow as gw
title = gw.getActiveWindowTitle()
if "BookStack" not in title:
raise RuntimeError(
"BookStackã"
"ã¢ã¯ãã£ãã§ã¯ãããŸããã"
)
ð æå®åº§æšã«ãããŠã£ã³ããŠãååŸãã
getWindowsAt()ã䜿çšãããšãæå®åº§æšã«ååšãããŠã£ã³ããŠãååŸã§ããŸãã
import pygetwindow as gw
windows = gw.getWindowsAt(
500,
300
)
for window in windows:
print(window.title)
ããŠã¹ã«ãŒãœã«ã®äœçœ®ã«ãããŠã£ã³ããŠã確èªããå Žåã¯ãPyAutoGUIãšçµã¿åãããŸãã
import pyautogui
import pygetwindow as gw
x, y = pyautogui.position()
windows = gw.getWindowsAt(
x,
y
)
for window in windows:
print(window.title)
ð ãŠã£ã³ããŠã®äœçœ®ãšãµã€ãºãååŸãã
ååŸãããŠã£ã³ããŠãªããžã§ã¯ãã«ã¯ãäœçœ®ããµã€ãºã®æ å ±ãå«ãŸããŠããŸãã
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"BookStack"
)
if not windows:
raise RuntimeError(
"察象ãŠã£ã³ããŠã"
"èŠã€ãããŸããã"
)
window = windows[0]
print(f"巊端: {window.left}")
print(f"äžç«¯: {window.top}")
print(f"å¹
: {window.width}")
print(f"é«ã: {window.height}")
äž»ãªããããã£ã¯æ¬¡ã®ãšããã§ãã
| ãããã㣠| æå³ |
|---|---|
title |
ãŠã£ã³ããŠã¿ã€ãã« |
left |
巊端ã®Xåº§æš |
top |
äžç«¯ã®Yåº§æš |
right |
å³ç«¯ã®Xåº§æš |
bottom |
äžç«¯ã®Yåº§æš |
width |
ãŠã£ã³ããŠã®å¹ |
height |
ãŠã£ã³ããŠã®é«ã |
topleft |
å·Šäžåº§æš |
bottomright |
å³äžåº§æš |
center |
äžå€®åº§æš |
size |
å¹ ãšé«ã |
area |
ãŠã£ã³ããŠã®é¢ç© |
ðª ãŠã£ã³ããŠãåé¢ãžè¡šç€ºãã
activate()ã䜿çšãããšã察象ãŠã£ã³ããŠãã¢ã¯ãã£ãã«ã§ããŸãã
window.activate()
PyAutoGUIã§æäœãéå§ããåã«å®è¡ããŸãã
import time
import pyautogui
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"BookStack"
)
if not windows:
raise RuntimeError(
"BookStackã"
"èŠã€ãããŸããã"
)
window = windows[0]
window.activate()
time.sleep(0.5)
pyautogui.hotkey(
"ctrl",
"l"
)
activate()ã®çŽåŸã¯ãOSãã¢ããªã±ãŒã·ã§ã³ã®åŠçãå®äºããŠããªãå ŽåããããŸãã
çãåŸ æ©æéãå ¥ããŠããPyAutoGUIãå®è¡ãããšå®å®ãããããªããŸãã
activate()ã®çŽåŸã«0.5ç§çšåºŠåŸ æ©ãããšããŠã£ã³ããŠãåé¢ãžåãæ¿ããåã«ããŒå ¥åãéã£ãŠããŸãåé¡ãæžãããŸãã
ð åé¢åã§ããããšã確èªãã
察象ãã¢ã¯ãã£ãåããããšãçŸåšã®ã¢ã¯ãã£ããŠã£ã³ããŠã確èªã§ããŸãã
import time
import pygetwindow as gw
window.activate()
time.sleep(0.5)
active_window = gw.getActiveWindow()
if active_window is None:
raise RuntimeError(
"ã¢ã¯ãã£ããŠã£ã³ããŠã"
"ååŸã§ããŸããã§ããã"
)
if active_window.title != window.title:
raise RuntimeError(
"察象ãŠã£ã³ããŠã"
"åé¢ãžè¡šç€ºã§ããŸããã§ããã"
)
å®å šäžèŽã§ã¯ãªããã¿ã€ãã«ã®äžéšã確èªããæ¹æ³ããããŸãã
active_title = (
gw.getActiveWindowTitle() or ""
)
if "BookStack" not in active_title:
raise RuntimeError(
"BookStackã"
"ã¢ã¯ãã£ãã§ã¯ãããŸããã"
)
OSã®ãã©ãŒã«ã¹å¶åŸ¡ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ããã®éç¥ãªã©ã«ãããactivate()ãå®è¡ããŠãæåŸ ã©ããåé¢åã§ããªãå ŽåããããŸããéèŠãªæäœã®åã«ã¯ã¢ã¯ãã£ãç¶æ ã確èªããŠãã ããã
â ãŠã£ã³ããŠãæå°åãã
minimize()ã䜿çšãããšã察象ãŠã£ã³ããŠãæå°åã§ããŸãã
window.minimize()
æå°åãããŠãããã©ããã¯isMinimizedã§ç¢ºèªã§ããŸãã
if window.isMinimized:
print(
"ãŠã£ã³ããŠã¯"
"æå°åãããŠããŸãã"
)
â¶ ãŠã£ã³ããŠãæå€§åãã
maximize()ã䜿çšãããšã察象ãŠã£ã³ããŠãæå€§åã§ããŸãã
window.maximize()
æå€§åãããŠãããã©ããã¯isMaximizedã§ç¢ºèªã§ããŸãã
if window.isMaximized:
print(
"ãŠã£ã³ããŠã¯"
"æå€§åãããŠããŸãã"
)
ç»é¢äžã®ãã¿ã³äœçœ®ãäžå®ã«ãããå Žåã¯ãæäœåã«æå€§åããŠããæ¹æ³ããããŸãã
if not window.isMaximized:
window.maximize()
â©ïž ãŠã£ã³ããŠãå ã®ãµã€ãºãžæ»ã
æå°åãŸãã¯æå€§åãããŠã£ã³ããŠãå
ã®ç¶æ
ãžæ»ãã«ã¯restore()ã䜿çšããŸãã
window.restore()
æå°åãããŠãããŠã£ã³ããŠãåé¢ãžè¡šç€ºããå Žåã¯ãå ã«åŸ©å ããŸãã
if window.isMinimized:
window.restore()
window.activate()
æå°åãããŠããå¯èœæ§ãããå Žåã¯ãrestore()ãå®è¡ããŠããactivate()ãå®è¡ããŸãã
ð ãŠã£ã³ããŠãç§»åãã
絶察座æšãžç§»åãã
moveTo()ã䜿çšãããšããŠã£ã³ããŠã®å·Šäžãæå®åº§æšãžç§»åã§ããŸãã
window.moveTo(
100,
100
)
ãã®äŸã§ã¯ããŠã£ã³ããŠã®å·Šäžã座æš(100, 100)ãžç§»åããŸãã
çŸåšäœçœ®ããçžå¯Ÿç§»åãã
moveRel()ã䜿çšãããšãçŸåšäœçœ®ãåºæºã«ç§»åã§ããŸãã
window.moveRel(
100,
50
)
ãã®äŸã§ã¯ãçŸåšäœçœ®ããå³ãž100ãã¯ã»ã«ãäžãž50ãã¯ã»ã«ç§»åããŸãã
è² ã®å€ãæå®ãããšãå·ŠãŸãã¯äžãžç§»åããŸãã
window.moveRel(
-100,
-50
)
ð ãŠã£ã³ããŠãµã€ãºã倿Žãã
æå®ãããµã€ãºãžå€æŽãã
resizeTo()ã䜿çšãããšããŠã£ã³ããŠãæå®ããå¹
ãšé«ããžå€æŽã§ããŸãã
window.resizeTo(
1280,
800
)
ç»åèªèã䜿çšããå Žåãå®è¡åã«ãŠã£ã³ããŠãµã€ãºãåºå®ãããšãç»é¢ã¬ã€ã¢ãŠãã®å€åãæããããŸãã
çŸåšãµã€ãºããçžå¯Ÿå€æŽãã
resizeRel()ã䜿çšãããšãçŸåšã®å¹
ãšé«ããåºæºã«ãµã€ãºã倿Žã§ããŸãã
window.resizeRel(
100,
50
)
ãã®äŸã§ã¯ãå¹ ã100ãã¯ã»ã«ãé«ãã50ãã¯ã»ã«å¢ãããŸãã
å°ããããå Žåã¯è² ã®å€ãæå®ããŸãã
window.resizeRel(
-100,
-50
)
ãŠã£ã³ããŠãæå€§åãããŠããç¶æ ã§ã¯ãç§»åããµã€ãºå€æŽãæåŸ ã©ããåäœããªãããšããããŸããå¿ èŠã«å¿ããŠå ã«restore()ãå®è¡ããŸãã
â ãŠã£ã³ããŠãéãã
close()ã䜿çšãããšã察象ãŠã£ã³ããŠãéããããŸãã
window.close()
æªä¿åã®ããŒã¿ãããå Žåã¯ã確èªãã€ã¢ãã°ã衚瀺ãããããšããããŸãã
close()ã¯ç¢ºèªãã€ã¢ãã°ãèªåçã«åŠçãããã®ã§ã¯ãããŸããã
close()ã¯å®éã«å¯Ÿè±¡ãŠã£ã³ããŠãéããŸããæªä¿åããŒã¿ã倱ãããå¯èœæ§ãããããã察象ã®ç¢ºèªãªãã«å®è¡ããªãã§ãã ããã
𧪠ãŠã£ã³ããŠã®ç¶æ ã確èªãã
äž»ãªç¶æ ã¯æ¬¡ã®ããããã£ã§ç¢ºèªã§ããŸãã
| ãããã㣠| æå³ |
|---|---|
isActive |
ã¢ã¯ãã£ãã |
isMinimized |
æå°åãããŠããã |
isMaximized |
æå€§åãããŠããã |
䜿çšäŸã¯æ¬¡ã®ãšããã§ãã
print(
f"ã¢ã¯ãã£ã: "
f"{window.isActive}"
)
print(
f"æå°å: "
f"{window.isMinimized}"
)
print(
f"æå€§å: "
f"{window.isMaximized}"
)
ç¶æ ã«å¿ããŠåŠçãåå²ã§ããŸãã
if window.isMinimized:
window.restore()
if not window.isActive:
window.activate()
ð¢ è€æ°ã®åè£ãèŠã€ãã£ãå Žå
åãæååãå«ããŠã£ã³ããŠãè€æ°éããŠãããšãgetWindowsWithTitle()ã¯è€æ°ã®åè£ãè¿ããŸãã
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"Google Chrome"
)
for index, window in enumerate(
windows
):
print(
index,
window.title
)
è¡šç€ºçµæã確èªããŠã䜿çšãããŠã£ã³ããŠãéžæã§ããŸãã
window = windows[0]
ãã ãããªã¹ãã®é åºãåžžã«åããšã¯éããŸããã
ã¿ã€ãã«ã远å 確èªããŠçµãèŸŒãæ¹ãå®å šã§ãã
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"Google Chrome"
)
matches = [
window
for window in windows
if "BookStack" in window.title
]
if len(matches) != 1:
raise RuntimeError(
"察象ãŠã£ã³ããŠã"
"äžæã«ç¹å®ã§ããŸããã§ããã"
)
window = matches[0]
è€æ°ã®åè£ãããç¶æ ã§ç¡æ¡ä»¶ã«windows[0]ãéžã¶ãšãå¥ã®ãŠã£ã³ããŠãæäœããå¯èœæ§ããããŸãã
ð§° ãŠã£ã³ããŠæ€çŽ¢ã颿°ã«ãã
ãŠã£ã³ããŠãæ¢ããŠååŸããåŠçã¯äœåºŠã䜿ãããã颿°ã«ãããšäŸ¿å©ã§ãã
import pygetwindow as gw
def find_window(
title_text: str
):
windows = gw.getWindowsWithTitle(
title_text
)
if not windows:
return None
return windows[0]
次ã®ããã«äœ¿çšããŸãã
window = find_window(
"BookStack"
)
if window is None:
print(
"BookStackã"
"èŠã€ãããŸããã§ããã"
)
else:
print(window.title)
ð¡ïž 察象ãäžæã«ç¹å®ãã颿°
誀æäœãé²ãå Žåã¯ãåè£ã1ä»¶ã ãã§ããããšã確èªããŸãã
import pygetwindow as gw
def get_unique_window(
title_text: str
):
windows = gw.getWindowsWithTitle(
title_text
)
if not windows:
raise RuntimeError(
f"ã{title_text}ããå«ã"
"ãŠã£ã³ããŠã"
"èŠã€ãããŸããã§ããã"
)
if len(windows) > 1:
titles = [
window.title
for window in windows
]
raise RuntimeError(
"察象ãŠã£ã³ããŠã"
"äžæã«ç¹å®ã§ããŸããã\n"
+ "\n".join(titles)
)
return windows[0]
䜿çšäŸã¯æ¬¡ã®ãšããã§ãã
window = get_unique_window(
"BookStack"
)
åé€ãéä¿¡ãªã©éèŠãªæäœãè¡ãå Žåã¯ã察象ãŠã£ã³ããŠã1ä»¶ã ãèŠã€ãã£ãããšã確èªããŠããæäœããŸãã
â³ ãŠã£ã³ããŠãéããŸã§åŸ ã€
ã¢ããªã±ãŒã·ã§ã³ã®èµ·åçŽåŸã¯ã察象ãŠã£ã³ããŠããŸã äœæãããŠããªãå ŽåããããŸãã
äžå®æéãç¹°ãè¿ãæ€çŽ¢ããããšã§ããŠã£ã³ããŠãéããŸã§åŸ æ©ã§ããŸãã
import time
import pygetwindow as gw
def wait_for_window(
title_text: str,
timeout: float = 10,
interval: float = 0.5
):
start_time = time.time()
while (
time.time() - start_time
< timeout
):
windows = (
gw.getWindowsWithTitle(
title_text
)
)
if windows:
return windows[0]
time.sleep(interval)
return None
次ã®ããã«äœ¿çšããŸãã
window = wait_for_window(
"BookStack",
timeout=10
)
if window is None:
raise RuntimeError(
"å¶éæéå
ã«"
"BookStackã"
"èŠã€ãããŸããã§ããã"
)
åŸ æ©åŠçã«ã¯ã¿ã€ã ã¢ãŠããèšããŠãã ããã察象ãŠã£ã³ããŠãéããªãå Žåã«ãããã°ã©ã ãæ°žä¹ ã«åŸ ã¡ç¶ããããšãé²ããŸãã
ð¥ïž ãŠã£ã³ããŠã®äœçœ®ãšãµã€ãºãåºå®ãã
ç»åèªèã座æšã¯ãªãã¯ãå®å®ããããããæäœåã«ãŠã£ã³ããŠäœçœ®ãšãµã€ãºãåºå®ã§ããŸãã
import time
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"BookStack"
)
if not windows:
raise RuntimeError(
"BookStackã"
"èŠã€ãããŸããã"
)
window = windows[0]
if window.isMinimized:
window.restore()
if window.isMaximized:
window.restore()
window.moveTo(
100,
100
)
window.resizeTo(
1280,
800
)
window.activate()
time.sleep(0.5)
ããã«ãããæ¯åããããåãç»é¢é 眮ã§PyAutoGUIãå®è¡ã§ããŸãã
åº§æšæå®ãç»åèªèã䜿çšããå Žåã¯ããŠã£ã³ããŠã®äœçœ®ã»ãµã€ãºãWindowsã®è¡šç€ºåçããã©ãŠã¶ã®ãºãŒã åçãåºå®ãããšå®å®æ§ãåäžããŸãã
ðž 察象ãŠã£ã³ããŠã®ã¹ã¯ãªãŒã³ã·ã§ãããååŸãã
PyGetWindowã§ååŸããäœçœ®ãšãµã€ãºããPyAutoGUIã®screenshot()ãžæž¡ããŸãã
import time
import pyautogui
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"BookStack"
)
if not windows:
raise RuntimeError(
"BookStackã"
"èŠã€ãããŸããã"
)
window = windows[0]
if window.isMinimized:
window.restore()
window.activate()
time.sleep(0.5)
region = (
window.left,
window.top,
window.width,
window.height
)
pyautogui.screenshot(
"bookstack.png",
region=region
)
PyGetWindowã¯æ®åœ±ãæ åœããŠããã®ã§ã¯ãªããæ®åœ±å¯Ÿè±¡ã®äœçœ®ãšãµã€ãºãååŸããŠããŸãã
å®éã«ç»é¢ãæ®åœ±ããŠããã®ã¯PyAutoGUIã§ãã
察象ãŠã£ã³ããŠã®åã«å¥ã®ãŠã£ã³ããŠãéãªã£ãŠãããšããã®éãªã£ãå å®¹ãæ®åœ±ãããŸããæ®åœ±åã«å¯Ÿè±¡ãã¢ã¯ãã£ãåããŠãã ããã
ð ãŠã£ã³ããŠå ã ããç»åæ€çŽ¢ãã
PyGetWindowã§ååŸããç¯å²ããç»åèªèã®æ€çŽ¢ç¯å²ãšããŠäœ¿çšã§ããŸãã
import pyautogui
import pygetwindow as gw
windows = gw.getWindowsWithTitle(
"BookStack"
)
if not windows:
raise RuntimeError(
"BookStackã"
"èŠã€ãããŸããã"
)
window = windows[0]
region = (
window.left,
window.top,
window.width,
window.height
)
center = (
pyautogui.locateCenterOnScreen(
"images/save_button.png",
confidence=0.9,
region=region
)
)
ç»é¢å šäœã§ã¯ãªã察象ãŠã£ã³ããŠå ã ããæ€çŽ¢ãããããæ€çŽ¢é床ã誀èªèã®æ¹åãæåŸ ã§ããŸãã
ð±ïž ãŠã£ã³ããŠåºæºã®çžå¯Ÿåº§æšã䜿ã
PyAutoGUIã®åº§æšã¯ç»é¢å·Šäžãåºæºã«ããŸãã
äžæ¹ããŠã£ã³ããŠã®å·Šäžãåºæºãšããçžå¯Ÿåº§æšã䜿çšãããšããŠã£ã³ããŠãç§»åããŠãåãå Žæãæäœã§ããŸãã
äŸãã°ããŠã£ã³ããŠå·Šäžããå³ãž300ãã¯ã»ã«ãäžãž200ãã¯ã»ã«ã®äœçœ®ãã¯ãªãã¯ããŸãã
import pyautogui
relative_x = 300
relative_y = 200
screen_x = (
window.left
+ relative_x
)
screen_y = (
window.top
+ relative_y
)
pyautogui.click(
screen_x,
screen_y
)
åŠçã颿°ã«ãããšäŸ¿å©ã§ãã
import pyautogui
def click_relative(
window,
x: int,
y: int
):
pyautogui.click(
window.left + x,
window.top + y
)
䜿çšäŸã¯æ¬¡ã®ãšããã§ãã
click_relative(
window,
300,
200
)
ç»é¢å šäœã®åºå®åº§æšãããã察象ãŠã£ã³ããŠã®å·Šäžãåºæºãšããçžå¯Ÿåº§æšã®æ¹ãããŠã£ã³ããŠäœçœ®ã®å€åã«å¯Ÿå¿ãããããªããŸãã
ð å®è·µäŸïŒãã©ãŠã¶ãæ¢ããŠæäœãã
次ã®äŸã§ã¯ã
- BookStackãéããŠãããŠã£ã³ããŠãæ¢ã
- æå°åãããŠããã°åŸ©å ãã
- åé¢ãžè¡šç€ºãã
- ã¢ã¯ãã£ãåã確èªãã
- ãŠã£ã³ããŠå ããæ€çŽ¢ç»åãæ¢ã
- ãã¿ã³ãã¯ãªãã¯ãã
ãšããåŠçãè¡ããŸãã
import time
import pyautogui
import pygetwindow as gw
pyautogui.FAILSAFE = True
pyautogui.PAUSE = 0.3
windows = gw.getWindowsWithTitle(
"BookStack"
)
if not windows:
raise RuntimeError(
"BookStackãéããŠãã"
"ãŠã£ã³ããŠã"
"èŠã€ãããŸããã§ããã"
)
if len(windows) > 1:
raise RuntimeError(
"BookStackãå«ã"
"ãŠã£ã³ããŠãè€æ°ãããŸãã"
)
window = windows[0]
if window.isMinimized:
window.restore()
window.activate()
time.sleep(0.5)
active_title = (
gw.getActiveWindowTitle() or ""
)
if "BookStack" not in active_title:
raise RuntimeError(
"BookStackãåé¢ãž"
"衚瀺ã§ããŸããã§ããã"
)
region = (
window.left,
window.top,
window.width,
window.height
)
try:
center = (
pyautogui.locateCenterOnScreen(
"images/save_button.png",
confidence=0.9,
region=region
)
)
except pyautogui.ImageNotFoundException:
pyautogui.screenshot(
"button_not_found.png",
region=region
)
raise RuntimeError(
"ä¿åãã¿ã³ã"
"èŠã€ãããŸããã§ããã"
)
pyautogui.moveTo(
center.x,
center.y,
duration=0.5
)
pyautogui.click()
print(
"ä¿åãã¿ã³ã"
"ã¯ãªãã¯ããŸããã"
)
ãã®äŸã«ã¯ãGUIèªååã§éèŠãªåŠçãå«ãŸããŠããŸãã
- 察象ãŠã£ã³ããŠãååšããã確èªãã
- è€æ°åè£ã«ãã誀æäœãé²ã
- æå°åããããŠã£ã³ããŠã埩å ãã
- 察象ãåé¢ãžè¡šç€ºãã
- ã¢ã¯ãã£ãåã確èªãã
- ç»åæ€çŽ¢ç¯å²ããŠã£ã³ããŠå ã«éå®ãã
- ç»åãèŠã€ãããªãå Žåã«ç»é¢ãä¿åãã
- ãã§ã€ã«ã»ãŒããæå¹ã«ãã
ð§± ãã©ãŠã¶æäœçšã®ã¯ã©ã¹ã«ãŸãšãã
ç¹°ãè¿ãå©çšããå Žåã¯ããŠã£ã³ããŠæäœãã¯ã©ã¹ãžãŸãšããããŸãã
import time
import pyautogui
import pygetwindow as gw
class BrowserWindow:
def __init__(
self,
title_text: str
):
self.title_text = title_text
self.window = (
self._find_unique_window()
)
def _find_unique_window(self):
windows = (
gw.getWindowsWithTitle(
self.title_text
)
)
if not windows:
raise RuntimeError(
f"ã{self.title_text}ãã"
"å«ããŠã£ã³ããŠã"
"èŠã€ãããŸããã"
)
if len(windows) > 1:
raise RuntimeError(
f"ã{self.title_text}ãã"
"å«ããŠã£ã³ããŠã"
"è€æ°ãããŸãã"
)
return windows[0]
def activate(self):
if self.window.isMinimized:
self.window.restore()
self.window.activate()
time.sleep(0.5)
active_title = (
gw.getActiveWindowTitle()
or ""
)
if (
self.title_text
not in active_title
):
raise RuntimeError(
"察象ãŠã£ã³ããŠã"
"åé¢ãžè¡šç€ºã§ããŸããã"
)
def get_region(self):
return (
self.window.left,
self.window.top,
self.window.width,
self.window.height
)
def screenshot(
self,
output_path: str
):
pyautogui.screenshot(
output_path,
region=self.get_region()
)
def click_relative(
self,
x: int,
y: int
):
pyautogui.click(
self.window.left + x,
self.window.top + y
)
次ã®ããã«äœ¿çšã§ããŸãã
browser = BrowserWindow(
"BookStack"
)
browser.activate()
browser.screenshot(
"bookstack.png"
)
browser.click_relative(
300,
200
)
åŠçã®æµããèšè¿°ããã³ãŒãããããŠã£ã³ããŠæ€çŽ¢ã座æšèšç®ã®è©³çްãåé¢ã§ããŸãã
â ïž PyGetWindowå©çšæã®æ³šæ
ð ãŠã£ã³ããŠã¿ã€ãã«ã¯å€åãã
ãã©ãŠã¶ã§ã¯ãéžæäžã®ã¿ãã衚瀺äžã®ããŒãžã«ãã£ãŠã¿ã€ãã«ãå€ãããŸãã
ããã¹ããšãã£ã¿ãŒã§ã¯ãéããŠãããã¡ã€ã«åãæªä¿åç¶æ ã«ãã£ãŠã¿ã€ãã«ãå€ããããšããããŸãã
å®å šãªã¿ã€ãã«ãåºå®ããã®ã§ã¯ãªãã察象ãèå¥ã§ããåºæã®äžéšåã䜿çšããŸãã
ð¢ åãã¿ã€ãã«ã®ãŠã£ã³ããŠãè€æ°ãã
è€æ°ã®ãã©ãŠã¶ãŠã£ã³ããŠã§åãããŒãžãéããŠããå Žåãªã©ã¯ãåãæ¡ä»¶ã«è€æ°ã®ãŠã£ã³ããŠãäžèŽããŸãã
éèŠãªåŠçã§ã¯ãåè£ã1ä»¶ã ãã§ããããšã確èªããŸãã
ð¯ åé¢åãæåãããšã¯éããªã
Windowsã®ãã©ãŒã«ã¹å¶åŸ¡ã確èªãã€ã¢ãã°ãéç¥ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ãªã©ã«ãã£ãŠã察象ãåé¢åã§ããªãå ŽåããããŸãã
activate()ã®å®è¡ã ãã§æåãããšå€æãããgetActiveWindowTitle()ãªã©ã§ç¢ºèªããŸãã
ðŒïž ãŠã£ã³ããŠå éšã®éšåã¯ååŸã§ããªã
PyGetWindowã§ååŸã§ããã®ã¯ããŠã£ã³ããŠã®ã¿ã€ãã«ãäœçœ®ããµã€ãºãç¶æ ãªã©ã§ãã
次ã®ãããªãŠã£ã³ããŠå éšã®èŠçŽ ãçŽæ¥ååŸããæ©èœã¯ãããŸããã
- ãã©ãŠã¶ã®ãã¿ã³
- HTMLèŠçŽ
- å ¥åæ¬
- ã¡ãã¥ãŒé ç®
- ãã©ãŠã¶ã®ã¿ã
- Excelã®ã»ã«
ããããæäœããå Žåã¯ãPyAutoGUIãç»åèªèãã·ã§ãŒãã«ããããŒãPlaywrightãªã©ãçµã¿åãããŸãã
PyGetWindowã¯ãŠã£ã³ããŠã®å€æ ãæ±ãã©ã€ãã©ãªã§ããã¢ããªã±ãŒã·ã§ã³å éšã®éšåãè§£æããã©ã€ãã©ãªã§ã¯ãããŸããã
ð¥ïž è€æ°ãã£ã¹ãã¬ã€
è€æ°ãã£ã¹ãã¬ã€ç°å¢ã§ã¯ããŠã£ã³ããŠã®X座æšãY座æšãè² ã®å€ã«ãªãããšããããŸãã
äŸãã°ãã¡ã€ã³ãã£ã¹ãã¬ã€ã®å·ŠåŽã«å¥ã®ãã£ã¹ãã¬ã€ãé 眮ããŠããå Žåããã®ãã£ã¹ãã¬ã€äžã®ãŠã£ã³ããŠã¯è² ã®X座æšãæã€ããšããããŸãã
äœçœ®ãã¹ã¯ãªãŒã³ã·ã§ããç¯å²ãæ±ãå Žåã¯ãååŸããå€ã確èªããŠãã ããã
ð 管çè æš©é
æäœå¯Ÿè±¡ã®ã¢ããªã±ãŒã·ã§ã³ã管çè æš©éã§å®è¡ãããŠããå Žåãéåžžæš©éã§å®è¡ããŠããPythonããã®æäœãå¶éãããããšããããŸãã
察象ã¢ããªã±ãŒã·ã§ã³ãšPythonã®æš©éã¬ãã«ãç°ãªããšãåé¢åãå ¥åæäœãæåŸ ã©ããåäœããªãå ŽåããããŸãã
ð§µ æäœäžã«ãŠãŒã¶ãŒãè§Šããªã
PyGetWindowã§å¯Ÿè±¡ãåé¢åããããšããŠãŒã¶ãŒãå¥ã®ãŠã£ã³ããŠãéžæãããšãPyAutoGUIã®å ¥åå ãå€ãããŸãã
é·ãåŠçã§ã¯ãéèŠãªæäœã®çŽåã«ã¢ã¯ãã£ããŠã£ã³ããŠãå確èªããŸãã
察象ãŠã£ã³ããŠã確èªããã«ãåé€ãéä¿¡ãä¿åã確å®ãªã©ã®æäœãå®è¡ããªãã§ãã ããã ãã©ãŒã«ã¹ãå¥ã®ãŠã£ã³ããŠãžç§»ããšãæå³ããªã察象ãæäœããå±éºããããŸãã
ð PyAutoGUIãšã®éã
PyGetWindowãšPyAutoGUIã®åœ¹å²ã¯æ¬¡ã®ããã«æŽçã§ããŸãã
| æäœ | PyGetWindow | PyAutoGUI |
|---|---|---|
| ãŠã£ã³ããŠãæ¢ã | â | â³ |
| ãŠã£ã³ããŠã¿ã€ãã«ãååŸ | â | â³ |
| ãŠã£ã³ããŠãåé¢å | â | â³ |
| ãŠã£ã³ããŠãç§»å | â | à |
| ãŠã£ã³ããŠãµã€ãºãå€æŽ | â | à |
| æå°åã»æå€§å | â | à |
| ããŠã¹æäœ | à | â |
| ããŒããŒãæäœ | à | â |
| ç»åèªè | à | â |
| ã¹ã¯ãªãŒã³ã·ã§ãã | à | â |
åºæ¬çã«ã¯ã次ã®ããã«äœ¿ãåããŸãã
PyGetWindow
察象ãŠã£ã³ããŠãç¹å®ãã
äœçœ®ã»ãµã€ãºã»ç¶æ
ãæŽãã
åé¢ãžè¡šç€ºãã
PyAutoGUI
ããŠã¹ãåãã
ã¯ãªãã¯ãã
ããŒããŒãå
¥åãã
ç»åãæ¢ã
ã¹ã¯ãªãŒã³ã·ã§ãããæ®ã
ð ãŸãšã
PyGetWindowã¯ãéããŠãããŠã£ã³ããŠãPythonããæ€çŽ¢ã»ååŸã»æäœããããã®ã©ã€ãã©ãªã§ãã
代衚çãªæ©èœã¯æ¬¡ã®ãšããã§ãã
getAllTitles()ïŒãŠã£ã³ããŠã¿ã€ãã«ã®äžèЧãååŸããgetAllWindows()ïŒãã¹ãŠã®ãŠã£ã³ããŠãååŸããgetWindowsWithTitle()ïŒã¿ã€ãã«ãããŠã£ã³ããŠãæ¢ãgetActiveWindow()ïŒã¢ã¯ãã£ããŠã£ã³ããŠãååŸããgetActiveWindowTitle()ïŒã¢ã¯ãã£ããŠã£ã³ããŠã®ã¿ã€ãã«ãååŸããgetWindowsAt()ïŒæå®åº§æšã«ãããŠã£ã³ããŠãååŸããactivate()ïŒãŠã£ã³ããŠãåé¢ãžè¡šç€ºããminimize()ïŒæå°åããmaximize()ïŒæå€§åããrestore()ïŒå ã®ç¶æ ãžæ»ãmoveTo()ïŒæå®åº§æšãžç§»åããmoveRel()ïŒçŸåšäœçœ®ããçžå¯Ÿç§»åããresizeTo()ïŒæå®ãµã€ãºãžå€æŽããresizeRel()ïŒçŸåšãµã€ãºããçžå¯Ÿå€æŽããclose()ïŒãŠã£ã³ããŠãéãã
PyGetWindowã ãã§ãã©ãŠã¶å éšãæäœããããšã¯ã§ããŸããã
å®éã®GUIèªååã§ã¯ã
- PyGetWindowã§å¯Ÿè±¡ãŠã£ã³ããŠãæ¢ã
- ãŠã£ã³ããŠã埩å ããŠåé¢ãžè¡šç€ºãã
- äœçœ®ããµã€ãºãæŽãã
- PyAutoGUIã§ç»åèªèãã¯ãªãã¯ãããŒå ¥åãè¡ã
ãšãã圢ã§çµã¿åãããŸãã
ç¹ã«ãç¹å®ã®ãã©ãŠã¶ãŠã£ã³ããŠãèªåæäœããå Žåã¯ã察象ãŠã£ã³ããŠãæäœæ¥ã§ã¢ã¯ãã£ãã«ããå¿ èŠããªããªããã¹ã¯ãªãããåç¬ã§èµ·åãããããªããŸãã