如何使用 pywinauto 使 window(已经 运行 任务)可见?
How do I make a window (already running task) visible using pywinauto?
除了在此站点上寻找答案外,我还查看了
和
但我还是一头雾水
我手动启动记事本并希望以下代码的第一个 while 块使记事本 window 可见。第二个 while 块有效,但我对行
感到困惑
dlg_spec = app.UntitledNotepad
这是怎么回事?这是什么python方法?
问题:如何获得第一个 while 代码块使 window 标题为
Untitled - Notepad
可见?
#--------*---------*---------*---------*---------*---------*---------*---------*
# Desc: Set focus on a window
# #--------*---------*---------*---------*---------*---------*---------*---------*
import sys
import pywinauto
# # Manually started Notepad
# # Want to make it visible (windows focus)
# # Program runs, but...
while 1:
handle = pywinauto.findwindows.find_windows(title='Untitled - Notepad')[0]
app = pywinauto.application.Application()
ac = app.connect(handle=handle)
print(ac)
topWin = ac.top_window_()
print(topWin)
sys.exit()
# # Working Sample Code
while 0:
app = pywinauto.Application().start('notepad.exe')
# describe the window inside Notepad.exe process
# # ?1: '.UntitledNotepad' - huh?
dlg_spec = app.UntitledNotepad
# wait till the window is really open
actionable_dlg = dlg_spec.wait('visible')
sys.exit()
为方便起见,这段代码起到了作用:
# # Manually started Notepad
# # Want to make it visible (windows focus).
# #
# # Two or three lines solution provided by
# # Vasily Ryabov's overflow answer
# # (wrapper ribbon and bow stuff).
while 1:
app = pywinauto.application.Application().connect(title="Untitled - Notepad")
dlg_spec = app.window(best_match="UntitledNotepad")
dlg_spec.set_focus()
sys.exit()
我建议您使用 win32gui
库来完成此任务,如下所示:
import win32gui
hwnd = win32gui.FindWindow(None, 'Notepad')
win32gui.SetForegroundWindow(hwnd)
win32gui.ShowWindow(hwnd, 9)
数字9
代表SW_RESTORE
如图here
好吧,第一个 while 循环应该使用相同的方法重写,除了 find_windows
(它是低级的,不建议直接使用)。您需要方法 .set_focus()
将 window 置于前台。
app = pywinauto.Application().connect(title="Untitled - Notepad")
app.UntitledNotepad.set_focus()
正在创建window规范dlg_spec = app.UntitledNotepad
意味着app
方法__getattribute__
被调用。最后这一行等同于 dlg_spec = app.window(best_match="UntitledNotepad")
。要找到实际的包装器,您需要调用 .wait(...)
或 .wrapper_object()
.
但是当你调用一个动作时(比如 .set_focus()
),Python 可以隐式地为你执行 wrapper_object()
调用(同时动态访问属性 set_focus
)。
除了在此站点上寻找答案外,我还查看了
和
但我还是一头雾水
我手动启动记事本并希望以下代码的第一个 while 块使记事本 window 可见。第二个 while 块有效,但我对行
感到困惑dlg_spec = app.UntitledNotepad
这是怎么回事?这是什么python方法?
问题:如何获得第一个 while 代码块使 window 标题为
Untitled - Notepad
可见?
#--------*---------*---------*---------*---------*---------*---------*---------*
# Desc: Set focus on a window
# #--------*---------*---------*---------*---------*---------*---------*---------*
import sys
import pywinauto
# # Manually started Notepad
# # Want to make it visible (windows focus)
# # Program runs, but...
while 1:
handle = pywinauto.findwindows.find_windows(title='Untitled - Notepad')[0]
app = pywinauto.application.Application()
ac = app.connect(handle=handle)
print(ac)
topWin = ac.top_window_()
print(topWin)
sys.exit()
# # Working Sample Code
while 0:
app = pywinauto.Application().start('notepad.exe')
# describe the window inside Notepad.exe process
# # ?1: '.UntitledNotepad' - huh?
dlg_spec = app.UntitledNotepad
# wait till the window is really open
actionable_dlg = dlg_spec.wait('visible')
sys.exit()
为方便起见,这段代码起到了作用:
# # Manually started Notepad
# # Want to make it visible (windows focus).
# #
# # Two or three lines solution provided by
# # Vasily Ryabov's overflow answer
# # (wrapper ribbon and bow stuff).
while 1:
app = pywinauto.application.Application().connect(title="Untitled - Notepad")
dlg_spec = app.window(best_match="UntitledNotepad")
dlg_spec.set_focus()
sys.exit()
我建议您使用 win32gui
库来完成此任务,如下所示:
import win32gui
hwnd = win32gui.FindWindow(None, 'Notepad')
win32gui.SetForegroundWindow(hwnd)
win32gui.ShowWindow(hwnd, 9)
数字9
代表SW_RESTORE
如图here
好吧,第一个 while 循环应该使用相同的方法重写,除了 find_windows
(它是低级的,不建议直接使用)。您需要方法 .set_focus()
将 window 置于前台。
app = pywinauto.Application().connect(title="Untitled - Notepad")
app.UntitledNotepad.set_focus()
正在创建window规范dlg_spec = app.UntitledNotepad
意味着app
方法__getattribute__
被调用。最后这一行等同于 dlg_spec = app.window(best_match="UntitledNotepad")
。要找到实际的包装器,您需要调用 .wait(...)
或 .wrapper_object()
.
但是当你调用一个动作时(比如 .set_focus()
),Python 可以隐式地为你执行 wrapper_object()
调用(同时动态访问属性 set_focus
)。