Windows下用Python自动化Chrome窗口置顶与新建标签页
环境准备
windows安装winsdk,然后使用其自带的inspect,相关官网:辅助功能工具 - 检查、Windows SDK 下载存档。检查(Inspect.exe)是基于 Windows 的工具,可以选择任何 UI 元素并查看其辅助功能数据。 可以查看Microsoft UI 自动化属性和控件模式以及Microsoft活动辅助功能(MSAA)属性。 检查还可以测试 UI 自动化树中自动化元素的导航结构以及Microsoft活动辅助功能层次结构中的可访问对象
git-bash下载网站:Git
miniconda下载:Miniconda
需求与效果
在 Windows 上实现一键操作:
- 打开(或激活)Google Chrome 浏览器;
- 将窗口**置顶**(TopMost),且支持再次运行时**取消置顶**(可切换);
- 自动新建一个标签页。
实现方式:conda 环境 + 单个 Python 脚本,仅依赖 =pywin32=。
方案概览
运行脚本 │ ├─ 1. 查找 Chrome 主窗口(EnumWindows + 类名 Chrome_WidgetWin_1) │ └─ 未找到 → 定位 chrome.exe 并启动,轮询等待窗口出现 │ ├─ 2. 激活窗口到前台(ShowWindow + SetForegroundWindow) │ ├─ 3. 读取 GWL_EXSTYLE,检查 WS_EX_TOPMOST (0x8) 标志位 │ ├─ 已置顶 → SetWindowPos(HWND_NOTOPMOST) → 取消置顶 │ └─ 未置顶 → SetWindowPos(HWND_TOPMOST) → 置顶 │ └─ 4. keybd_event 发送 Ctrl+T 新建标签页
新建标签页选择 Ctrl+T 快捷键而非 UIA 点击“新标签页”按钮:
快捷键不受 Chrome 界面语言、版本和 DPI 缩放影响,更稳定。
(UIA 检查显示该按钮 ClassName 为 =TabStripControlButton=,支持 InvokePattern,
如需精确点击也可走 UIA 路线。)
环境准备:conda 创建独立环境
| |
核心脚本 chrome_newtab.py
文件位置:=D:\temp\chrome_newtab.py=
| |
关键 Win32 API 说明
| API / 常量 | 作用 |
|---|---|
EnumWindows + 类名 Chrome_WidgetWin_1 | 枚举并定位 Chrome 主窗口句柄 |
IsIconic / ShowWindow(SW_RESTORE) | 窗口最小化时先还原 |
SetForegroundWindow | 把窗口激活到前台(失败时用 Alt 键绕过前台锁定) |
GetWindowLong(GWL_EXSTYLE) | 读取扩展样式,检测 WS_EX_TOPMOST (0x8) 判断当前是否置顶 |
SetWindowPos(HWND_TOPMOST / HWND_NOTOPMOST) | 设置/取消置顶,配合 SWP_NOMOVE \vert SWP_NOSIZE 不改变位置尺寸 |
keybd_event | 模拟按键发送 Ctrl+T 新建标签页 |
使用方法
| |
行为对照表:
| 场景 | 行为 |
|---|---|
| Chrome 未运行 | 自动启动 → 置顶 → 新建标签页 |
| 已运行、未置顶 | 激活前台 → 置顶 → 新建标签页 |
| 已运行、已置顶 | 激活前台 → 取消置顶 → 新建标签页 |
测试验证
在 Chrome 已运行(主窗口 =hwnd=0x0006022E=)的情况下连续运行两次:
# 第 1 次 [信息] 检测到 Chrome 窗口 hwnd=0x0006022E [信息] 窗口已置顶 [信息] 已发送 Ctrl+T,新建标签页完成。 # 第 2 次 [信息] 检测到 Chrome 窗口 hwnd=0x0006022E [信息] 窗口已取消置顶 [信息] 已发送 Ctrl+T,新建标签页完成。
检测到的句柄与 UIA 工具抓取的 0x0006022E 一致,置顶/取消切换正常。
后续可扩展
- *命令行参数*:增加
--on/--off/ =–toggle=,实现强制置顶、强制取消或仅切换而不新建标签页; *一键批处理*:编写
chrome_newtab.bat双击运行:1 2 3@echo off call conda activate chrome_auto python D:\temp\chrome_newtab.py- *UIA 方案*:改用
uiautomation库调用“新标签页”按钮的 InvokePattern,实现不依赖键盘焦点的精确点击。