Как передать значение переменной в HTA

Следующий код в пакетном файле, который получает пароль от пользователя через диалоговое окно HTA. Это работает нормально. Я хочу передать значение переменной !user[%%a]! для отображения во всплывающем диалоговом окне HTA, чтобы я мог видеть Введите пароль для идентификатора пользователя: «ПОЛЬЗОВАТЕЛЬСКАЯ ПЕРЕМЕННАЯ ПАКЕТНОГО ФАЙЛА» в этом окне: введите здесь описание изображения

Как я могу это сделать?

<!-- :
@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>

person Abhi    schedule 04.12.2017    source источник


Ответы (2)


Вот пример Microsoft использования свойства командной строки объекта приложения hta.

<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>

Написание HTML-приложений для Internet Explorer 5.0, Скотт Робертс, библиотека MSDN, 2001.

person ACatInLove    schedule 04.12.2017
comment
это работает, но <meta http-equiv="x-ua-compatible" content="ie=9" /> нужно сразу после открытия тега html. Если есть Internet Explorer 10 или 11, некоторые теги hta не будут работать, поэтому вам нужно принудительно установить его на т.е. 9 - person npocmaka; 04.12.2017

Я всегда рад видеть, что мои сценарии используются :). Попробуйте эту модификацию:

<!-- :
@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>
person npocmaka    schedule 04.12.2017
comment
Привет. Спасибо за прежний сценарий HTA :). Когда я запускаю модифицированный сценарий, о котором вы упомянули, я получаю его как: введите пароль для пользователя [1], затем введите пароль для пользователя [2] и т. д., я хочу отобразить значение, соответствующее пользователю [2], который является me2. Во-вторых, если это вообще возможно, вы можете немного объяснить, я не могу понять, как текущее значение пользователя передается в HTA. - person Abhi; 04.12.2017
comment
понятно . Изменена переменная user[!counter!] на !user[%%a]! в секунду «для цикла». Большое спасибо - person Abhi; 04.12.2017
comment
@Abhi - я отредактировал ответ. Чтобы передать аргументы приложению HTA, я использовал ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0), который получает входные данные, передаваемые через канал. Я не мог найти способ передать аргументы командной строки. Теперь в цикле for используется двойная расширенная переменная - echo %%user[!counter!]%% - person npocmaka; 04.12.2017
comment
Спасибо. Теперь работает нормально! :) - person Abhi; 04.12.2017
comment
Привет, я преобразовал этот пакетный файл в exe с помощью Bat_To_Exe_Converter, окно пароля приложения HTA ​​не работает должным образом. Поле ввода в форме не появляется и текст тоже не тот что появляется при выполнении bat файла. Почему это так? что мне делать? - person Abhi; 13.12.2017
comment
@Abhi - Какой конвертер вы использовали? Скорее всего, я не смогу вам с этим помочь, так как понятия не имею, как работает конвертер. Хотя вы можете взглянуть на это - stackoverflow.com/questions/28174386/ - person npocmaka; 13.12.2017
comment
www.f2ko.de/en/b2e.php вот этот - person Abhi; 13.12.2017
comment
Я создал пост, чтобы более подробно объяснить то же самое здесь: stackoverflow. ком/вопросы/47793813/ - person Abhi; 13.12.2017
comment
@Abhi - я тестировал оба скрипта, опубликованные здесь - оба приложения hta работают нормально. - person npocmaka; 13.12.2017