【问题标题】:How to pass variable value to HTA如何将变量值传递给 HTA
【发布时间】:2017-12-04 11:20:02
【问题描述】:

批处理文件中的以下代码通过 HTA 对话框从用户那里获取密码。它工作正常。我想传递一个变量值!user[%%a]!显示在弹出的 HTA 对话框中,以便我可以看到 输入用户 ID 的密码: "BATCH FILE USER VARIABLE" 在这个窗口中:

我该怎么做?

<!-- :
@setlocal enableextensions enabledelayedexpansion
:: PasswordSubmitter.bat
@echo off
set user[1]=me1
set user[2]=me2
set user[3]=me3


for /l %%a in (1,1,3)  do (
    set counter=%%a
    for /f "tokens=* delims=" %%p in ('mshta.exe "%~f0"') do (
        set pass[!counter!]=%%p
    )
    echo Password for User-!user[%%a]! is "!pass[%%a]!"
)
endlocal
exit /b


<html>
<HEAD><title>Password submitter</title>
<HTA:APPLICATION INNERBORDER="no" SYSMENU="no" SCROLL="no" >
   <style type="text/css">
   body {
      color: white;
      background: black;
      font-family: "Calibri", monospace;
   }
   </style>
</HEAD>
<body>
    <p>Enter password for User ID</p>
    <script language='javascript' >
    window.resizeTo(400,200);
        function pipePass() {
            var pass=document.getElementById('pass').value;
            var fso= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);
            close(fso.Write(pass));

    }
</script>

<input type='password' name='pass' size='16'></input>
<hr>
<button onclick='pipePass()'>Submit</button>

</body>

</html>

【问题讨论】:

    标签: javascript batch-file hta


    【解决方案1】:

    我总是很高兴看到我的脚本被使用 :)。试试这个修改:

    <!-- :
    @setlocal enableextensions enabledelayedexpansion
    :: PasswordSubmitter.bat
    @echo off
    set user[1]=me1
    set user[2]=me2
    set user[3]=me3
    
    
    for /l %%a in (1,1,3)  do (
        set counter=%%a
        for /f "tokens=* delims=" %%p in (' echo %%user[!counter!]%%^|mshta.exe "%~f0"') do (
            set pass[!counter!]=%%p
        )
        echo Password for User-!user[%%a]! is "!pass[%%a]!"
    )
    endlocal
    exit /b
    
    
    <html>
    <HEAD><title>Password submitter</title>
    <HTA:APPLICATION INNERBORDER="no" SYSMENU="no" SCROLL="no" >
       <style type="text/css">
       body {
          color: white;
          background: black;
          font-family: "Calibri", monospace;
       }
       </style>
    </HEAD>
    <body>
        <p>Enter password for {User ID}</p>
        <script language='javascript' >
        window.resizeTo(400,200);
        //var sh = new ActiveXObject( 'WScript.Shell' );
        var input= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0);
        var user=input.ReadLine();
        document.body.innerHTML = document.body.innerHTML.replace('{User ID}', user);
        function pipePass() {
            var pass=document.getElementById('pass').value;
            var fso= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);
            close(fso.Write(pass));
    
        }
    </script>
    
    <input type='password' name='pass' size='16'></input>
    <hr>
    <button onclick='pipePass()'>Submit</button>
    
    </body>
    
    </html>
    

    【讨论】:

    • 嗨,感谢以前的 HTA 脚本 :)。当我运行您提到的修改后的脚本时,我得到它:“输入用户 [1] 的密码”然后“输入用户 [2] 的密码”等等,我想显示与用户 [2] 对应的值是 "me2" 。其次,如果可能的话,你能解释一下吗,我无法理解当前用户值是如何在 HTA 中传递的
    • 知道了。将变量 user[!counter!] 编辑为 !user[%%a]!第二个'for循环'的“in”。非常感谢
    • @Abhi - 我已经编辑了答案。要将参数传递给 HTA 应用程序,我使用了 ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0),它获取通过管道传递的输入。我找不到传递命令行参数的方法。现在在 for 循环中使用双扩展变量 - echo %%user[!counter!]%%
    • 谢谢。现在工作正常! :)
    • 您好,我使用 Bat_To_Exe_Converter 将此批处理文件转换为 exe,HTA 应用程序密码窗口无法正常工作。表单中的输入字段没有出现,文本也不是 bat 文件执行中出现的内容。为什么会这样?我该怎么办?
    【解决方案2】:

    这是一个使用 hta 应用程序对象的命令行属性的 Microsoft 示例。

    <HTML>
    <HEAD>
       <TITLE>Scripting the HTA:APPLICATION Tag</TITLE>
       <HTA:APPLICATION
          ID="oHTA"
       >   <SCRIPT LANGUAGE="VBScript">
          Option Explicit      Dim cmdLineArray
          Dim strHello      ' This code assumes that you have no spaces in 
          ' the path to Hello.hta.  (In other words, this code
          ' splits the command line by spaces and assumes
          ' that your name is the second word.)
          '
          cmdLineArray = Split(oHTA.commandLine)
          strHello = "Hello " & cmdLineArray(1) & ", " _
                   & "How are you?"      MsgBox strHello
       </SCRIPT>
    </HEAD>
    <BODY>
    </BODY>
    </HTML>
    

    为 Internet Explorer 5.0 编写 HTML 应用程序,Scott Roberts,MSDN Library 2001。

    【讨论】:

    • 这可行,但&lt;meta http-equiv="x-ua-compatible" content="ie=9" /&gt; 需要在html 标签打开后立即使用。如果有 Internet Explorer 10 或 11,则某些 hta 标签将不起作用,因此您需要将其强制为 ie 9
    猜你喜欢
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2019-08-18
    • 2017-08-07
    相关资源
    最近更新 更多