如何最小化升高的控制台窗口?

时间:2014-12-23 06:40:18

标签: batch-file inno-setup

@echo off
if _%1_==_payload_  goto :payload

:getadmin

    echo %~nx0: elevating self
    set vbs=%temp%\getadmin.vbs
    echo Set UAC = CreateObject^("Shell.Application"^)                >> "%vbs%"
    echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
goto :eof

:payload

    echo %~nx0: running payload with parameters:
    echo %*
    echo ---------------------------------------------------
    echo ADM is launching. DO NOT CLOSE THIS WINDOW.
    cd /d %2
    shift
    shift
    sample.bat
goto :eof

exit

我使用有效负载调用Sample.bat,我希望在给出对sample.bat的调用时最小化窗口。

1 个答案:

答案 0 :(得分:2)

在这一行:

echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
                                                                ↑
                                                              vShow

您使用ShellExecute对象的Shell方法,该方法使用第五个参数(vShow)来推荐应用程序窗口最初应如何显示。您已使用该参数值1,其描述为(等于SW_SHOWNORMAL):

  

使用普通窗口打开应用程序。如果窗口最小化   或最大化,系统将其恢复到原始大小和   位置。

首先,我会尝试将vShow参数的值更改为7,其描述为(等于SW_SHOWMINNOACTIVE):

  

使用最小化窗口打开应用程序。活动窗口保持活动状态。

您的脚本意味着用以下内容替换上述行:

echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 7 >> "%vbs%"

请注意,我没有测试过这个。