关注批量启动的应用程序

时间:2011-11-25 09:12:32

标签: windows batch-file windows-xp focus window

我正在从批处理脚本运行一系列应用程序,我想确保打开的程序始终处于焦点。
我们需要确保这一点,因为它是一个实验性设置,我们希望尽量减少麻烦,例如必须将焦点更改为全屏窗口。

当早期程序退出并且桌面可见并且用户点击桌面上的某个图标并且在此之后,正在处理序列中的下一个程序,新窗口时,这个问题很少发生不是焦点。

现在我从视图中隐藏了命令窗口,问题变得更加频繁。

任何强制关注序列中下一个程序的方法,无论是批处理命令,OS的一些设置(我们在Win XP上)还是帮助应用程序都可能有用。

3 个答案:

答案 0 :(得分:2)

如果你想关注另一个程序,你可以这样做。

call focus WindowTitle
exit /b

:focus
setlocal EnableDelayedExpansion 

    if ["%~1"] equ [""] (
        echo Please give the window's title.
        exit /b
    )

    set pr=%~1
    set pr=!pr:"=!

    echo CreateObject("wscript.shell").appactivate "!pr!" > "%tmp%\focus.vbs"
    call "%tmp%\focus.vbs"
    del "%tmp%\focus.vbs"

goto :eof 
endlocal 

我正在使用vbscript来关注应用程序。 您需要通过窗口的标题窗口的名称(whatever.bat)。 为了确保您获得正确的窗口,您可以设置其标题。 例如:

title WindowTitle

答案 1 :(得分:1)

如果我做对了,start /f yourapp.exe将在前台启动应用程序。

答案 2 :(得分:0)

Yaron答案会起作用,但不希望创建临时文件来执行脚本,而是希望嵌入code in the batch directly。或使用jscript,它也是Windows脚本宿主的一部分,并且更容易嵌入批处理中 这是一个focusOn.bat enter link description here,它将根据标题的起始字符串来设置应用程序的焦点(不会创建临时文件,这会使它更快一些):

@if (@X)==(@Y) @end /* JScript comment
    @echo off
    cscript //E:JScript //nologo "%~f0"  %*
    exit /b %errorlevel%
@if (@X)==(@Y) @end JScript comment */

var ARGS=WScript.Arguments;

if (ARGS.Length < 1 ) {
     WScript.Echo("No window title passed");
     WScript.Quit(1);
}

var sh=new ActiveXObject("WScript.Shell");
if(!sh.AppActivate(ARGS.Item(0))){
    WScript.Echo("Cannot find an app with window name starting with: " + ARGS.Item(0));
}

用法示例:

call focusOn.bat Untitled

应将焦点放在记事本上(其标题仍为“无标题-记事本”)