我目前的情况是,我打开一个进程,该进程在随机位置打开(这就是该进程的工作原理)。
我有进程 PID,所以我需要以某种方式聚焦此窗口,并将其移动到屏幕中心。 我做错了什么,因为我什至无法将焦点集中在该窗口上...尝试使用不同的应用程序并得到相同的结果...
我选择窗口的方式 -
appl = pywinauto.application.Application()
appl.connect(process=824)
app_dialog = appl.top_window_()
app_dialog.Minimize()
app_dialog.Maximize()
##app_dialog.SetFocus() ##doesn't work aswell
##pywinauto.win32functions.SetForegroundWindow(app_dialog)## doesn't work
感谢您的阅读:)
import pywinauto
def bring_window_to_front(pid):
"""将具有给定 PID 的窗口置于前台并将其居中。"""
app = pywinauto.application.Application()
app.connect(process=pid)
window = app.top_window()
# 确保窗口可见并已还原(非最小化/最大化)
if not window.is_visible():
window.restore()
window.set_focus()
# 居中窗口
window.move_window_to_coordinates(x=-8, y=-8) # 考虑窗口装饰
# 用你的进程 ID 替换这个值
pid = 824
bring_window_to_front(pid)
说明:
-
连接到进程:
该代码使用
pywinauto.application.Application()
连接到具有指定 PID 的进程。 -
获取顶层窗口:
它使用
app.top_window()
获取与该进程关联的顶层窗口。 - 使窗口可见并还原: 在尝试聚焦或居中窗口之前,它会检查窗口是否可见以及是否已还原(既非最小化也非最大化)。 如果不是,它将使窗口可见并将其还原。
-
设置焦点:
window.set_focus()
方法用于将焦点设置到窗口。 -
居中窗口:
window.move_window_to_coordinates()
方法用于将窗口居中。 通过将 x 和 y 坐标设置为 -8,它会考虑窗口装饰并将窗口放置在屏幕的视觉中心。
注意:
-
确保你已安装
pywinauto
库:pip install pywinauto
- 此代码假定目标进程只有一个顶层窗口。 如果进程有多个窗口,你可能需要修改代码以查找并聚焦到特定的窗口。
这个改进后的代码应该可以解决你在聚焦和居中窗口时遇到的问题。
标签:python,user-interface,window,pywinauto From: 44215170