如何将退出状态从 HTA (vbscript) 返回到调用批处理文件?
我的批处理文件代码
@echo OFF
echo Configuring Test...
call AppConfigurationEditor.hta
call TestConfigurationEditor.hta
1.如果用户在第一个 HTA 上单击“取消”按钮,我不想运行第二个 HTA。
2.批处理脚本立即调用/显示第二个 HTA,而不是等到第一个 HTA 关闭。
最佳答案
HTA 没有实现向调用进程返回错误级别的方法。
WScript.Quit
无法使用。语言引擎vbscript/javascript/...是一样的,但是实例化引擎的宿主对象不是习惯性的windows脚本宿主,而是浏览器对象,所以WScript
对象是不存在的。
window.close
方法无法使用。它可以关闭hta,但不会给出返回值。
使用 hta 向调用进程返回值的通常方法是将此值保存在文件或注册表中。然后调用进程可以检索所需的值。
如果需要errorlevel,没有直接的方法。但是可以实现间接方法。只需使用 WMI 检索正在运行的进程列表,找到当前的 hta,并为此进程调用允许设置退出值的 Terminate 方法。
<HTML>
<HEAD>
<HTA:APPLICATION
ID = "testCloseHTA"
APPLICATIONNAME = "testCloseHTA"
VERSION = "0.1"
NAVIGABLE = "yes"
SHOWINTASKBAR = "yes"
SINGLEINSTANCE = "yes"
WINDOWSTATE = "normal"
BORDER = "normal"
BORDERSTYLE = "normal"
INNERBORDER = "no"
CAPTION = "yes"
MINIMIZEBUTTON = "yes"
MAXIMIZEBUTTON = "yes"
SYSMENU = "yes"
SCROLL = "yes"
SCROLLFLAT = "yes"
CONTEXTMENU = "yes"
SELECTION = "yes"
/>
<TITLE>testCloseHTA</TITLE>
<STYLE>
body { font-size: 1em; font-family:Verdana; }
</STYLE>
<SCRIPT language="Javascript">
function closeWithErrorlevel(errorlevel){
var colProcesses = GetObject('winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2').ExecQuery('Select * from Win32_Process Where Name = \'mshta.exe\'');
var myPath = (''+location.pathname).toLowerCase();
var enumProcesses = new Enumerator(colProcesses);
for ( var process = null ; !enumProcesses.atEnd() ; enumProcesses.moveNext() ) {
process = enumProcesses.item();
if ( (''+process.CommandLine).toLowerCase().indexOf(myPath) > 0 ){
process.Terminate(errorlevel);
}
}
}
function closeHTA(value){
// test close of window. Use default value
if (typeof value === 'undefined') value = 0;
try { closeWithErrorlevel(value) } catch (e) {};
}
</SCRIPT>
</HEAD>
<BODY>
<button onclick="closeHTA(0);">close application 0</button>
<button onclick="closeHTA(1);">close application 1</button>
<button onclick="closeHTA(2);">close application 2</button>
</BODY>
<script language="Javascript">
window.attachEvent('onbeforeunload',closeHTA);
</script>
</HTML>
然后你可以从批处理文件中调用它
start "" /wait testCloseHTA.hta
if errorlevel 2 (
echo option 2 has been selected
) else if errorlevel 1 (
echo option 1 has been selected
) else (
echo option 0 has been selected
)
关于batch-file - 如何将退出状态从 HTA (vbscript) 返回到调用批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20818111/