首页 > 编程问答 >Pywinauto 找到进程窗口并聚焦它

Pywinauto 找到进程窗口并聚焦它

时间:2024-07-22 06:21:53浏览次数:16  
标签:python user-interface window pywinauto

我目前的情况是,我打开一个进程,该进程在随机位置打开(这就是该进程的工作原理)。

我有进程 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)

说明:

  1. 连接到进程: 该代码使用 pywinauto.application.Application() 连接到具有指定 PID 的进程。
  2. 获取顶层窗口: 它使用 app.top_window() 获取与该进程关联的顶层窗口。
  3. 使窗口可见并还原: 在尝试聚焦或居中窗口之前,它会检查窗口是否可见以及是否已还原(既非最小化也非最大化)。 如果不是,它将使窗口可见并将其还原。
  4. 设置焦点: window.set_focus() 方法用于将焦点设置到窗口。
  5. 居中窗口: window.move_window_to_coordinates() 方法用于将窗口居中。 通过将 x 和 y 坐标设置为 -8,它会考虑窗口装饰并将窗口放置在屏幕的视觉中心。

注意:

  • 确保你已安装 pywinauto 库: pip install pywinauto
  • 此代码假定目标进程只有一个顶层窗口。 如果进程有多个窗口,你可能需要修改代码以查找并聚焦到特定的窗口。

这个改进后的代码应该可以解决你在聚焦和居中窗口时遇到的问题。

标签:python,user-interface,window,pywinauto
From: 44215170

相关文章

  • 我在 Windows 10 上运行 Python 代码后控制台立​​即关闭
    虽然我在代码末尾使用input(),但在Windows10(IDLE之外)的窗口中输入名称后,控制台仍然立即关闭,并且我看不到结果。我该怎么做才能阻止控制台关闭?#!python3name=input('Enteryourname:')print('Hello'+name)input('pressEntertoexit:')你在代码末尾......
  • 具有未定义嵌套列表深度的嵌套列表的Python注释类型
    [[1,2,3],3,[2,4],5]的类型是list[list[int]|int]但是,如果嵌套列表具有未定义的深度,例如[[[1,2]],2,[1,[3,[3]]]],3,[2,[2]]],那么它会具有什么类型?可以使用递归类型提示来表示任意深度嵌套的列表:fromtypingimportList,Union......
  • 使用 WSL 时截取 Windows 桌面的屏幕截图
    我主要使用Windows,其中运行WSL2。因此,从子系统中运行的python脚本中,我想截取Windows监视器上的所有内容,就像这样简单:v1importmssimportosos.environ['DISPLAY']=':0'withmss.mss()assct:sct.shot()这只会给出“分段错误”错误并且没有图像。因......
  • 在Spyder(Python 3.6)中导入cv2时出现导入错误
    我已经在Windows操作系统中安装了opencv3.0.0。我已运行该应用程序并已成功将其安装在C:\驱动器中,并且还将cv2.pyd文件复制到C:\Python27\Lib\site-packages中,正如我在几个教程视频中看到的那样在我的Python2.7.5Shell中,即当我键入>>>i......
  • Python + VS Code 调试器:可视化我的程序当前正在执行的源代码中的位置?
    当我使用VSCodePython调试器时:我可以执行我的程序,以便编辑器将我逐行带到源代码中的任何位置(跳转到相关文件/如果尚未打开则将其打开)目前的执行情况是?是的,VSCode的Python调试器可以让你逐行执行代码,并实时显示当前执行的位置。以下是操作方法:1.设置断点:......
  • 如何立即取消使用 Ollama Python 库生成答案的 Asyncio 任务?
    我正在使用Ollama通过OllamaPythonAPI从大型语言模型(LLM)生成答案。我想通过单击停止按钮取消响应生成。问题在于,只有当响应生成已经开始打印时,任务取消才会起作用。如果任务仍在处理并准备打印,则取消不起作用,并且无论如何都会打印响应。更具体地说,即使单击按钮后,此函数......
  • 使用 np.array 索引过滤 Python 列表
    谁能向我解释一下列表self.data如何使用numpy索引数组selec_idx进行索引/过滤?完整的课程可在https://github.com/kaidic/LDAM-DRW/blob/master/imbalance_cifar.pydefgen_imbalanced_data(self,img_num_per_cls):new_data=[]n......
  • 尝试在cmd(python)中安装turtle
    当我在cmd中编写pipinstallturtle后,这条消息出现在我面前。有人知道该怎么办吗?C:\>pipinstallturtleCollectingturtleUsingcachedturtle-0.0.2.tar.gz(11kB)ERROR:Commanderroredoutwithexitstatus1:command:'C:\Users\Bruger\App......
  • Python + Polars:如何有效地“fill_null”仅 DataFrame 的某些列?
    例如,假设我只想fill_null(strategy="zero")DataFrame的数字列。我当前的策略是这样做:final_df=df.select(cs.exclude(cs.numeric()))final_df.with_columns(df.select(cs.numeric()).fill_null(strategy="zero"))是否有替代的、更惯用或更有效的方法来实现我......
  • 如何找到 Windows 上 Python 的安装位置?
    我想找出我的Python在Windows上的安装路径。例如:C:\Python25如何找到Python的安装位置?在Windows上查找Python安装位置的方法有很多种:1.使用where命令(推荐方法):打开命令提示符(cmd)。输入以下命令并按回车键:wherepython......