You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pywinauto让已运行的记事本窗口显示并获焦点?

解决记事本窗口焦点问题 & 理解pywinauto的属性语法

先给你理清两个核心问题:

一、dlg_spec = app.UntitledNotepad到底是什么?

这其实是pywinauto提供的快捷语法糖,本质是对窗口查找方法的简化。

当你用app.XXX这种属性访问方式时,pywinauto会自动把XXX转换成窗口标题的匹配规则:它会把原标题里的空格、连字符(-)等符号去掉,转成驼峰命名格式。比如你的记事本标题是Untitled - Notepad,去掉空格和-后就变成了UntitledNotepad,所以app.UntitledNotepad等价于:

dlg_spec = app.window(title_re="Untitled - Notepad")

这种语法是为了让代码更简洁,但如果窗口标题里有特殊字符、或者驼峰转换后有歧义(比如多个窗口匹配),更推荐用window()方法明确指定title或title_re参数,避免出错。

二、让记事本窗口获取焦点的可行代码

既然你已经手动打开了记事本,我们只需要连接到已运行的进程,找到窗口后调用set_focus()方法就能让它显示在前台并获得焦点。以下是完整的可运行代码:

from pywinauto import Application
import time

# 连接到已运行的记事本进程,backend选"uia"或"win32"都可以,记事本用uia兼容性更好
app = Application(backend="uia").connect(title="Untitled - Notepad")

# 获取窗口对象,两种方式任选其一
# 方式1:用你疑惑的属性语法
notepad_window = app.UntitledNotepad
# 方式2:明确调用window方法(更清晰,复杂场景推荐)
# notepad_window = app.window(title="Untitled - Notepad")

while True:
    # 让窗口获取焦点
    notepad_window.set_focus()
    # 加个延时,避免循环过于频繁占用资源
    time.sleep(1)

代码说明:

  1. connect()方法用来关联已经运行的记事本进程,通过title参数精准匹配窗口标题;
  2. set_focus()是pywinauto窗口对象的内置方法,专门用来将窗口带到前台并设置为当前活动窗口;
  3. 循环里加time.sleep(1)是为了防止循环跑太快,占用过多CPU资源,你可以根据需求调整延时时间。

内容的提问来源于stack exchange,提问作者CopyPasteIt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:38:28