使用批处理文件/CMD 切换窗口焦点

Posted

技术标签:

【中文标题】使用批处理文件/CMD 切换窗口焦点【英文标题】:Switch Window Focus using a Batch File/CMD 【发布时间】:2019-04-17 09:02:41 【问题描述】:

我有一个 Windows 应用程序,当启动时使用任务计划程序启动时没有焦点(即,我无法在应用程序中执行键盘命令,直到我单击应用程序成为焦点)。焦点在桌面上。

应用程序通过任务计划程序启动,因为它需要最高权限才能启动(绕过 UAC 提示)。

似乎只有第三方应用程序支持此切换到应用程序。我曾尝试使用批处理文件启动命令来切换焦点,但启动延迟,但我无法找到任何可以切换焦点的 Windows 批处理文件命令。

【问题讨论】:

那是因为没有。 您可以尝试使用 sendKeys.bat - 仅将应用程序置于焦点,您可以省略发送键部分并仅指向窗口名称 - call sendKeys.bat "WindowTitle" "" Powershell 可以做到这一点,如果这是可以接受的:***.com/questions/42566799/… ***.com/questions/52381791/… 【参考方案1】:

可以使用 Windows 脚本切换到前台。为此,还需要提供一个将由批处理命令创建的文件。脚本处理后,文件将被删除。命令如下:

echo new ActiveXObject("WScript.Shell").AppActivate("Firefox"); > tmp.js
cscript //nologo tmp.js & del tmp.js

【讨论】:

【参考方案2】:

@if (@X)==(@Y) @end /* JScript comment 

@echo off 
setlocal
for /f "tokens=2" %%i in ('tasklist /FI "IMAGENAME eq VOR.exe" ^| find /I "VOR.exe"') do set pid=%%i
if "%pid%" == "" (
    %localappdata%\VOR\VOR.exe
) else (
    cscript //E:JScript //nologo "%~f0" "%~nx0" "%pid%"
)
exit %errorlevel% 
endlocal

@if (@X)==(@Y) @end JScript comment */ 

var sh=new ActiveXObject("WScript.Shell"); 
if (sh.AppActivate(WScript.Arguments.Item(1)) == 0) 
    sh.SendKeys("% r"); 

【讨论】:

复制所有这些代码...保存为批处理文件..只需将 VOR 替换为您的 exe 名称即可。

以上是关于使用批处理文件/CMD 切换窗口焦点的主要内容,如果未能解决你的问题,请参考以下文章

bat批处理文件运行时隐藏cmd窗口

使用bat打开多个cmd窗口执行gulpnode

求教:运行bat文件后如何让cmd窗口自动关闭?

window bat 运行 cmd 命令

使用 cmd 在桌面的不同位置打开多个文件资源管理器窗口

bat 打开cmd 执行Python文件