Javascript 在批处理HTA脚本中添加编程按钮

Javascript 在批处理HTA脚本中添加编程按钮,javascript,html,batch-file,hta,Javascript,Html,Batch File,Hta,我目前有下面的.bat脚本,它显示3个硬编码按钮,并返回一个与按下的按钮对应的数字 <!-- :: Batch section @echo off setlocal echo Select an option: for /F "delims=" %%a in ('mshta.exe "%~F0"') do set "HTAreply=%%a" echo End of HTA window, reply: "%HTAre

我目前有下面的.bat脚本,它显示3个硬编码按钮,并返回一个与按下的按钮对应的数字

<!-- :: Batch section
@echo off
setlocal

echo Select an option:
for /F "delims=" %%a in ('mshta.exe "%~F0"') do set "HTAreply=%%a"
echo End of HTA window, reply: "%HTAreply%"
goto :EOF
-->


<HTML>
<HEAD>
<HTA:APPLICATION SCROLL="no" SYSMENU="no" >

<TITLE>HTA Buttons</TITLE>
<SCRIPT language="JavaScript">
window.resizeTo(374,100);

function closeHTA(reply){
   var fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.GetStandardStream(1).WriteLine(reply);
   window.close();
}

</SCRIPT>
</HEAD>
<BODY>
   <button onclick="closeHTA(1);">First option</button>
   <button onclick="closeHTA(2);">Second option</button>
   <button onclick="closeHTA(3);">Third option</button>
</BODY>
</HTML>

HTA按钮
窗口。resizeTo(374100);
功能关闭(回复){
var fso=新的ActiveXObject(“Scripting.FileSystemObject”);
fso.GetStandardStream(1).WriteLine(回复);
window.close();
}
第一选择
第二种选择
第三种选择
我希望能够将按钮数作为变量传递到这个.bat脚本中。例如,通过数字4和4按钮出现“按钮1”、“按钮2”等


我不知道该怎么做。如何将任何变量传递到HTA部分?如何以编程方式循环创建HTA部分中的按钮?

您可能可以将其用作:

虽然它有一个单独的提交按钮,但不会在单击时检测到事件。 但是可以编辑

编辑: 这是一个没有单独提交按钮的脚本:

E:\scripts>buttons one two three
1

如何将任何变量传递到HTA部分?
单向使用*.txt、*.ini文件

Button I
Button II
Button III
Button IV
Button V
如何以编程方式循环创建HTA部分中的按钮?
读取*.ini文件的内容[Microsoft JScript(ActiveX)]

使用循环[JavaScript ES5]创建按钮

    var strI = '<button onclick="closeHTA(*NUM*);">*TEXT*</button>';

    var str = s.split(/\r|\r\n|\n/);
    var collectionButton;

    for (i = 0; i < str.length; i++) {
        collectionButton += strI.replace('*NUM*', i).replace('*TEXT*', str[i]);
    }
    collectionButton = collectionButton.replace('undefined', '');
    document.getElementById('container').innerHTML = collectionButton;
var strI='*TEXT*';
var str=s.split(/\r |\r\n |\n/);
var采集按钮;
对于(i=0;i

演示谷歌硬盘:

在没有hta的情况下,借助实用程序exe(如
BG.exe
)读取鼠标输入,就可以完成此操作

下面的脚本使用certutil解包BG.exe,并具有创建按钮或按钮菜单的功能。它使用宏来评估鼠标单击并返回包含以下信息的值:

  • 输入单击是否发生在已定义的按钮上
    • validclick
      已定义或未定义
  • 所选状态(真或假)
    状态{btn[i]}
    • 创建按钮/菜单时需要使用
      -t
      开关
  • 按下按钮的索引
    !有效点击
  • 按钮显示的文本字符串<代码>!点击
@Echo-off&CD/d“%~dp0”
:#基于:https://www.dostips.com/forum/viewtopic.php?f=3&t=9222
如果不存在“%~DP0组件\”MD“%~DP0组件\”
如果不存在“%~dp0Components\BG.exe”Certutil-decode“%~f0”“%~dp0Components\BG.exe”
cls
设置“注册还原=(调用)”
rem禁用快速编辑(如果启用)。如果脚本禁用,则恢复在:结束标签
reg query HKEY_CURRENT_USER\console\/v Quickedit | findstr.exe/l“0x1”>nul&&(
(Reg add HKEY\U CURRENT\U USER\console\/v QuickEdit/t Reg\U DWORD/d 0x0/f)>nul
设置“reg.restore=reg添加HKEY\U CURRENT\U USER\console\/v QuickEdit/t reg\U DWORD/d 0x1/f”
)
对于/f“tokens=4 Delims=:”('CHCP')中的%%C,请设置“active.cp=%%C”
chcp 65001>nul
对于/f%%e in('echo prompt$e^ | cmd'),请设置\e=%%e
如果“!!”==”(在宏定义和暂停退出/B 1之前,不得启用回显延迟扩展)
Rem按钮声音通过取消定义下面的按钮Fx来禁用;在定义OnCLick宏之前
设置“buttonsfx=On”
Components\BG.exe播放“%HOMEDRIVE%\Windows\Media\Windows源已发现.wav”
设置“OnClick=(调用)”
如果已定义按钮FX(
设置“OnClick=(Components\BG.exe播放”%HOMEDRIVE%\Windows\Media\Windows提要Discovered.wav“)
)
rem返回按钮点击c{pos}变量NY中的坐标;X格式
设置“GetClick=Set”Clicked=“&Set”ValidClick=“&for/f”标记=1,2”%%X in('Components\BG.exe鼠标')Do(设置/A“c{pos}=%%X+1”&设置“c{pos}=%%%Y;!c{pos pos}!”)
Rem测试替换按钮#如果点击在btn[#]内[coords]定义变量:点击[value eq string];ValidClick[值均衡按钮编号/未定义];状态{btn[#]}[值eq真/假]
设置“If.Button=For/f”标记=1,2 Delims=;“%%X在(“!c{pos}!”)中,如果没有,请执行”!btn[#][Coords]:[%Y;%X]=!" == "!btn[#][Coords]!单击“设置”=!btn[#][string]!&Set“ValidClick=#”&(如果定义了btn[#]{t}调用:Toggle#)&
Rem以与单击相同的方式测试所有按钮;通过子字符串修改将“按钮”替换为“exc”,排除按钮
设置“qClicked=(对于(1!按钮!)中的/l%%i!)如果不做“%%i”=”Exc“For/f”令牌=1,2 Delims=;“%%X in(!c{pos}!”)如果不做“!btn[%%i][Coords]:[%%Y;%%X]=!=”!btn[%%i][Coords]!“设置”点击=!btn[%%i][string]!”&设置“有效点击=%%i=%”和%OnClick=(如果定义了btn[%i][%i],%%调用%%
Rem显示所有按钮
设置“dButtons=For/l%%i In(11!buttons!)Do numl)Else(设置/A“m{\c}=Col”&Call:Createmenu^!Params^!2>numl))&Set“m{\c}=“&Set”m{x}=2”)Else Set Params=”
Rem使用示例
%菜单%“选项1”“选项2”“选项3”
%菜单:Col=l[X]“选项4”“选项5”“选项6”
%菜单:Col=l[X]“选项7”“选项8”“选项9”
呼叫:创建按钮“点击我”!btn[Y]!2-t
呼叫:createButton“或我”!l[Y]!l[X]-T
调用:createButton“”!l[Y]!2 "0;0;0" "255;255;255" "36"
呼叫:创建按钮“退出”!btn[Y]!2 "200;;" "155;155;255" "48;2;60;;"
%数据按钮%
:循环
%获取点击率%
%qclick%如果定义为ValidClick(
点击标题按钮!有效点击!:“!点击:=!”
如果“!Clicked:~-5!”==”调用:InputBar!ValidClick!
如果“!单击!”==“退出”(
努尔
(标题)
努尔
端部
后藤:Eof
:切换
如果“!State{btn[%~1]}!”==“true”(
努尔
设置“display.menu=!display.menu!%%按钮[!b{i}!]%”
集合/a“b{y}+=3”,“b{i}+=1”
)
%显示。菜单%
退出/b0
:输入栏
设置/P“输入=%\E%[!btn[%1][P]!H%\E%C%\E%7%\E%[0;7m%\E%[?25h%\E%[?12h”
    var file = (new ActiveXObject("WScript.Shell")).CurrentDirectory + '\\settings.ini';
    var fso, f1, ts, s;
    var ForReading = 1;
    fso = new ActiveXObject('Scripting.FileSystemObject');
    ts = fso.OpenTextFile(file, ForReading);
    s = ts.ReadAll();
    ts.Close();
    var strI = '<button onclick="closeHTA(*NUM*);">*TEXT*</button>';

    var str = s.split(/\r|\r\n|\n/);
    var collectionButton;

    for (i = 0; i < str.length; i++) {
        collectionButton += strI.replace('*NUM*', i).replace('*TEXT*', str[i]);
    }
    collectionButton = collectionButton.replace('undefined', '');
    document.getElementById('container').innerHTML = collectionButton;