【问题标题】:Using command line/batch to switch to/focus on app使用命令行/批处理切换到/专注于应用程序
【发布时间】:2016-03-14 13:27:06
【问题描述】:

我可以在 cmd 上使用一个命令来切换到/聚焦于选定的应用程序窗口吗?

假设我有三个应用程序在工作:A、B、C,目前我专注于 B。是否有命令(不是快捷方式)切换到/专注于应用程序 A?

也许我可以批量处理?

我在 Windows 上工作。

【问题讨论】:

    标签: windows batch-file command-line


    【解决方案1】:

    试试sendKeys.bat

    call sendkeys.bat "Title A" ""
    

    第一个参数是你想要切换到的标题的开头(如果是Some Title,你可以只使用Some,如果它足够独特的话)。第二个参数是空的双引号。 通常,该脚本用于将密钥发送到特定窗口。但是如果您将第二个参数留空(如""),它将不会发送任何密钥。

    【讨论】:

    • 谢谢,这个脚本帮了我很多忙!
    • @Garric - 有一个激活窗口的代码 - if (sh.AppActivate(title)){,OP 也接受了答案。答案本身解释了其余部分。
    • 谢谢。我正在寻找类似的功能
    • 如果窗口被最小化,这个 .bat 文件似乎不起作用...有没有办法解决这个问题?
    • @shelper 有,但需要调用另一个脚本 - 检查这个:github.com/npocmaka/batch.scripts/blob/master/hybrids/.net/c/… - 检查使用 -h
    【解决方案2】:

    这应该可行:

    echo (new ActiveXObject("WScript.Shell")).AppActivate("app A"); > focus.js
    cscript //nologo focus.js
    del focus.js
    

    【讨论】:

    • 这曾经对我有用,然后有一天我开始遇到错误:Access is denied. Input Error: Can not find script file "C:\focus.js". Could Not Find C:\focus.js
    【解决方案3】:

    我在this gist 中的解决方案非常基于@npocmaka 的回答,但它对OPs 特定问题给出了更完整和准确的答案(我必须合并couple more references 才能到达this):如果命名的应用程序已经在运行,它会激活并恢复它,否则就启动它。

    为了完整起见,我将在此处重复代码 - 根据需要替换应用的图像名称和启动它所需的路径:

    @if (@X)==(@Y) @end /* JScript comment 
    
    @echo off 
    setlocal
    for /f "tokens=2" %%i in ('tasklist /FI "IMAGENAME eq Fork.exe" ^| find /I "Fork.exe"') do set pid=%%i
    if "%pid%" == "" (
        %localappdata%\Fork\Fork.exe
    ) else (
        cscript //E:JScript //nologo "%~f0" "%~nx0" "%pid%"
    )
    exit /b %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"); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 2012-01-21
      • 2020-11-19
      相关资源
      最近更新 更多