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

如何用Windows批处理监听弹窗,仅在弹窗激活时执行SendKeys?

解决思路:精准定位弹窗再执行SendKeys

这个问题很常见——纯SendKeys确实会无脑发送到当前活动窗口,咱们可以用批处理+JScript混合脚本的方式,先精准定位目标弹窗,只有确认它存在且可激活时才发送按键,完全不会影响其他正在使用的程序。

完整实现代码

@if (@CodeSection == @Batch) @then
@echo off
:: 调用脚本的JScript核心逻辑部分
cscript //nologo //E:JScript "%~f0"
goto :EOF
@end

// JScript 核心检测与操作逻辑
var shell = WScript.CreateObject("WScript.Shell");
// 尝试激活标题为"Information"的弹窗(标题需完全匹配)
if (shell.AppActivate("Information")) {
    // 确认弹窗存在并激活后,发送回车关闭(可根据弹窗需求修改按键)
    shell.SendKeys("{ENTER}");
    WScript.Echo("[成功] 已关闭Information弹窗");
} else {
    // 弹窗不存在时,直接跳过操作,避免干扰当前活动窗口
    WScript.Echo("[提示] 未检测到Information弹窗,不执行任何操作");
}

代码细节解释

  1. 混合脚本结构:开头的@if (@CodeSection == @Batch) @then是Windows脚本宿主的特殊标记,用来区分批处理代码块和JScript代码块,让一个文件同时兼容两种脚本逻辑。
  2. 弹窗检测核心:shell.AppActivate("Information")是关键——这个方法会尝试激活标题完全匹配Information的窗口:
    • 如果弹窗存在且能被激活,返回true,后续才会执行SendKeys;
    • 如果弹窗不存在,直接返回false,不会执行任何按键操作。
  3. 自定义关闭按键:你可以根据弹窗的实际关闭需求修改SendKeys参数:
    • 按ESC关闭:改成shell.SendKeys("{ESC}")
    • 按空格关闭:改成shell.SendKeys(" ")

进阶:定时自动检测弹窗

如果需要持续监听弹窗(比如每隔5分钟检测一次,防止系统登出),可以修改批处理部分加入循环:

@if (@CodeSection == @Batch) @then
@echo off
:: 每隔300秒(5分钟)检测一次弹窗,可自行调整时间
:loop
cscript //nologo //E:JScript "%~f0"
timeout /t 300 /nobreak >nul
goto loop
goto :EOF
@end

// JScript 部分与上面保持一致...

这个循环会在后台静默运行,只有检测到目标弹窗时才会执行关闭操作,完全不影响你正常使用Word、浏览器等程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:26:25