【问题标题】:how to launch an application from a batch file without giving it focus (windows 7)如何从批处理文件启动应用程序而不给它焦点(Windows 7)
【发布时间】:2011-03-20 19:00:05
【问题描述】:

我有一个带有 for 循环的批处理文件,我在其中反复启动我的应用程序(应用程序自行终止)。我正在使用:

开始/等待/分钟我的应用程序

为了让它最小化运行并等待自终止。 我的问题是应用程序每次运行时都会窃取窗口焦点。 我如何在不给它焦点的情况下启动应用程序?

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    您可以使用 Batch/JScript 混合,因此您可以使用 WScript.Run 方法。

    第二个参数 =7 就知道了。

    7=(将窗口显示为最小化窗口。活动窗口保持活动状态。)。
    MSDN Run Method

    @if (@X)==(@Y) @goto :Dummy @end/* Batch part
    @echo off
    setlocal
    cscript //nologo //e:jscript "%~f0"
    goto :eof
    
    Jscript part begins here */
    var sh=new ActiveXObject("WScript.Shell");
        sh.Run("cmd /c wait.bat",7,true)
        sh.Run("cmd /c wait.bat",7,true)
    

    wait.bat

    ping -n 5 127.0.0.1
    

    【讨论】:

    • 这似乎没有按预期工作。我使用上述方法对我的应用程序进行了两次调用(我复制了 cscript 命令)。第一次通话后,我激活了另一个窗口。当应用程序第二次启动时,它会窃取焦点。
    • 即使我两次启动 wait.bat 并更改焦点(手动),我也没有失去焦点。请发布一个小样本
    • @eyaler:会不会是应用程序本身抢了焦点?如果是这样,我怀疑您是否能够使用任何类型的脚本来阻止它。
    • 好吧,我的应用程序是一个 c# 表单,似乎问题在于 topmost = true。有了这个,上面的方法失败了。但是使用 topmost = false,运行最小化就足够了,您不会失去焦点
    • @eyaler: 也许它也可以与 sh.Run("cmd /c wait.bat",0,true) 一起使用,0 代表 隐藏窗口并激活另一个窗口
    【解决方案2】:

    我的应用程序是一个 c# 表单,问题在于 topmost = true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 2014-10-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多