@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的调用时最小化窗口。
答案 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%"
请注意,我没有测试过这个。