(批量)有没有办法制作可点击的按钮?
(Batch) Is there a way to make clickable buttons?
您好,我想知道是否有一种简单的方法可以在批处理文件中制作可点击的文本按钮。我看到人们在使用它们,所以我很确定这是可能的。
我想制作一个按钮来简单地激活 goto test1
命令。
是的。它 is.There 很少 options.I 从第一个开始,然后编辑更多的答案。
1) 使用 IExpress。 Here's a link to example Yes/No pop-up。您可以使用 FOR /F 处理结果并决定要做什么。在脚本的开头你可以设置标题和问题:
for /f %%a in ('iexpYNButton.bat') do set ans=%%a
if %ans% equ yes (
do something
)
2) With MSHTA - 这又是 Yes/No pop-up
for /f "tokens=3 delims=: " %%a in ('choose.bat') do @set ans=%%a
if %ans% equ yep (
do something
)
这里有一个使用 Carlos Aguilera 的 BG.exe(包含)等待和读取鼠标点击的方法。
包含许多函数和宏以简化自定义按钮的创建及其使用。脚本末尾的 :main
标签中包含一个用法示例。
@Echo off & CD /d "%~dp0"
CLS
:# Based on: https://www.dostips.com/forum/viewtopic.php?f=3&t=9222
:# example begins at 'main' label at end of file
If not exist "%TEMP%\Games_By_T3RRY\" MD "%TEMP%\Games_By_T3RRY"
If not exist "%TEMP%\Games_By_T3RRY\BG.exe" Certutil -decode "%~f0" "%TEMP%\Games_By_T3RRY\BG.exe" > nul
Set BG.exe="%TEMP%\Games_By_T3RRY\BG.exe"
Set "reg.restore=(Call )"
:# disable QuickEdit if enabled. Restored at :end label if disabled by script
reg query HKEY_CURRENT_USER\console\ /v Quickedit | findstr.exe /l "0x1" > nul && (
(Reg add HKEY_CURRENT_USER\console\ /v QuickEdit /t REG_DWORD /d 0x0 /f) > nul
Set "reg.restore=Reg add HKEY_CURRENT_USER\console\ /v QuickEdit /t REG_DWORD /d 0x1 /f"
)
For /f "tokens=4 Delims=: " %%C in ('CHCP')Do Set "active.cp=%%C"
chcp 65001 > nul
For /f %%e in ('echo prompt $E^|cmd')Do Set \E=%%e
If "!!" == "" (Echo DelayedExpansion must not be enabled before macro definitions&Pause & Exit /B 1)
:# Alt: %Buffer:@=Alt% Main: %Buffer:@=Main%
Set "Buffer=<nul set /p "=%\E%[?1049!@!""
Set "Alt=h"
Set "Main=l"
:# button sound fx. disable by undefining buttonsfx below ; prior to definition of OnCLick macro
Set "buttonsfx=On"
%BG.exe% Play "%WINDIR%\Media\Windows Feed Discovered.wav"
Set "OnClick=(Call )"
Set "OnType=(Call )"
If defined buttonsfx (
For /f "Delims=" %%G in ('Dir /b /s "%WINDIR%\SystemApps\*KbdKeyTap.wav"')Do If exist "%%~G" Set "OnClick=(Start /b "" %BG.exe% Play "%%~G")"
Set "OnType=(start /b "" %BG.exe% Play "%WINDIR%\Media\Windows Feed Discovered.wav")"
)
:# return button click coords in c{pos} variable n Y;X format
Set "GetClick=Set "Clicked="& Set "ValidClick="& for /f "tokens=1,2" %%X in ('%BG.exe% mouse')Do (Set /A "c{pos}=%%X+1"&Set "c{pos}=%%Y;!c{Pos}!")"
:# test substituted button # if click is within btn[#][coords] defines variables: Clicked [value eq string] ; ValidClick [value eq button number / undefined]; btn{State}[#] [value eq true/false]
Set "If.Button=For /f "Tokens=1,2 Delims=;" %%X in ("!c{pos}!")Do If not "!btn[#][Coords]:[%%Y;%%X]=!" == "!btn[#][Coords]!" Set "Clicked=!btn[#][string]!"& Set "ValidClick=#"& (If defined btn[#]{t} Call :Toggle #)& "
:# tests all buttons in same way as if.clicked ; exclude a button via substring modification substituting 'exc' for 'button#'
Set "qClicked=(For /l %%i in (1 1 !btns[i]!)Do If not "%%i"=="Exc" For /f "Tokens=1,2 Delims=;" %%X in ("!c{pos}!")Do If not "!btn[%%i][Coords]:[%%Y;%%X]=!" == "!btn[%%i][Coords]!" Set "Clicked=!btn[%%i][string]!"& Set "ValidClick=%%i"& %OnClick% & (If defined btn[%%i]{t} Call :Toggle %%i))& "
:# Id if button is an input bar. Requires additional Args. Optional -f switch forces input
:# Usage: %qInput% <Prompt> [-f]
Set qInput=Set "Input="^& Echo({!Clicked!}^|findstr /RC:"\<[{][ ]*[}]\>" ^> nul ^&^& Call :InputBar !ValidClick!
:# display all buttons
Set "dButtons=For /l %%i In (1 1 !btns[i]!)Do <nul Set /P "=!btn[%%i]!""
:# Undefine all buttons. Use substring modification to exclude a specific button or states from being undefined.
:# IE Preserve button 1: %clrButtons:$EXC=btn[1]%
Set "clrButtons=(For /f "tokens=1 Delims==" %%G In ('Set btn')Do Echo("%%G"|findstr /Lic:"$EXC" || Set "%%G=") 2> nul & CLS"
:# displays all selected button or input values
Set "dValues=For /l %%i in (1 1 !btns[i]!)Do if defined btn{State}[%%i] (set "value=%\E%[0;7m!btn{State}[%%i]:true=%\E%[0;32mtrue!"& Echo(%\E%[33mButton[%%i]%\E%[36m=!value:false=%\E%[0;90mfalse!%\E%[0m)"
:# menu macro for easily creating multiple buttons simultaneously
Set "CHash=Col"
set "menu=Set "m{\c}="& For %%n in (1 2)Do if %%n==2 ((If "!CHash!"=="Col" (Set "m{\c}="&Call:createmenu !Params! 2> nul )Else (Set /A "m{\c}=Col"&Call :Createmenu ^!Params^! 2> nul ))& Set "m{\c}="&Set "m{x}=2")Else Set Params="
==========
Goto :Main
==========
:# FUNCTIONS
====
:end
(%Reg.Restore%) > nul
(Title )
<nul set /p "=%\E%[?25h"
CHCP %active.cp% > nul
Endlocal
Goto :Eof
=================
:Toggle <button#>
If "!btn{State}[%~1]!"=="true" (
<nul set /P "=!btn[%~1]!"
Set "btn{State}[%~1]=false"
)Else (
<nul set /P "=!btn[%~1]:48=7;48!"
Set "btn{State}[%~1]=true"
)
Exit /b 0
:createGrid <Character> <Min> <Max> <FGcol> <BGcol> <BTNcol>
Set "Char=%~1"
For /L %%Y in (%~2 3 %~3)Do For /L %%X in (%~2 3 %~3)Do Call:CreateButton "!Char:~0,1!" %%Y %%X "%~4" "%~5" "%~6" -t
Goto :Eof
==========================================================
:createbutton <string> <y> <x> <FGcol> <BGcol> <BTNcol> -t
:# Arg Structure: 1,2,3 = Mandatory ; 4,5,6 = Optional ; -t = Optional switch. Must be Last arg if present.
:# Button Border ; Recommended font: Lucida Console
:# Codepage: 65001
:# alt 201 alt 205 alt 187 ╔═╗
:# alt 186 space alt 186 ║ ║
:# alt 200 alt 205 alt 188 ╚═╝
Set "l[Y]=!btn[Y]!"
If not "%~2"=="!btn[Y]!" Set /A "btn[Y]=%~2+3"
If "%~3" == "" Exit /b 1
Set /a "btns[i]+=1+0"
Set "btn[%btns[i]%][p]=%~2;%~3"
Set "btn[%btns[i]%][string]=%~1"
If /I "%~4" == "-t" (set "btn[BG]=%\E%[48;2;230;230;200m")Else (If "%~4" == "" (set "btn[BG]=%\E%[48;2;230;230;200m")Else set "btn[BG]=%\E%[38;2;%~4m")
If /I "%~5" == "-t" (set "btn[FG]=%\E%[38;2;;;m")Else (If "%~5" == "" (set "btn[FG]=%\E%[38;2;;;m")Else set "btn[FG]=%\E%[48;2;%~5m")
If /I "%~6" == "-t" (set "btn[Col]=%\E%[90m")Else (If "%~6" == "" (set "btn[Col]=%\E%[90m")Else set "btn[Col]=%\E%[%~6m")
:# defines variable identifying button as toggle button; used by %If.Button% and %qClicked% macros
Echo("%*"|findstr /lic:"-t" > nul && Set "btn[%btns[i]%]{t}=true" || Set "btn[%btns[i]%]{t}="
:# Constrain button creation to console dimensions
For /f "Tokens=1,2 Delims=: " %%G in ('Mode^|findstr /lic:"Columns" /lic:"Lines"')Do (
Set /A "%%G=%%H"
If /I "%%G"=="Columns" ( Set /A "%%G[max]=%%H+%~3+2" )Else Set /A "%%G[max]=%%H"
)
Set "len="& set "s=#%~1" & ( for %%P in (8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do ( if "!s:~%%P,1!" NEQ "" ( set /a "len+=%%P" & set "s=!s:~%%P!" ))) & set /a "btn[%btns[i]%][Len]=len" 2>nul
If !len! GTR !Columns[Max]! (
Echo(Button length exceeds display width. Button width must be LSS than console Columns
Pause
Exit
)
If %~2 GEQ !Lines[Max]! (
Echo(Button height exceeds display height. Button height must be LSS than console Lines
Pause
Exit
)
:# define button click coords and button Upper / lower border display values
:# - border is not defined as clickable.
Set /A "btn{Xmin}=%3+1", "btn{Xmax}=%3+len", "l[X]=btn{Xmax}+2"
Set "btn[%btns[i]%][Len]=" & Set "btn[%btns[i]%][S]=" & Set "btn[%btns[i]%][coords]="
For /l %%i in (!btn{Xmin}! 1 !btn{Xmax}!)Do (
Set /A "btn[%btns[i]%][Len]=%%i-3", "Xoffset=%%i-1"
Set "btn[%btns[i]%][coords]=!btn[%btns[i]%][coords]![%2;!Xoffset!]"
Set "btn[%btns[i]%][Bar]=!btn[%btns[i]%][Bar]!═"
Set "btn[%btns[i]%][S]=!btn[%btns[i]%][S]! "
)
:# define toggle state variable
If defined btn[%btns[i]%]{t} Set "btn{State}[%btns[i]%]=false"
:# Button Graphic. Toggle is effected by substituting Background color VT code 48 with 7;48 to invert button text color.
Set "btn[%btns[i]%]=%\E%[%2;%3H%Btn[col]%%\E%7║%\E%8%\E%A╔!btn[%btns[i]%][Bar]!╗%\E%8%\E%B╚!btn[%btns[i]%][Bar]!╝%\E%8%\E%C%\E%[0m!btn[FG]!!btn[BG]!!btn[%btns[i]%][String]!%\E%[0m%btn[col]%║%\E%[0m%\E%[2E%\E%7"
Set "btn[%btns[i]%][t]=%\E%[0m!btn[FG]!!btn[BG]!!btn[%btns[i]%][String]!%\E%[0m%btn[col]%║%\E%[0m%\E%[K"
Exit /b 0
==========================================
:createMenu <"list" "of" "button strings">
:# Associated Macro: %Menu%
:# - Uses default values for button color schemes m{fg} m{bg} and m{olc}
:# - Define the value of those variables prior to calling :createMenu
:# to the desired color scheme if you wish to override default values.
:# - Defaults to Row 3 [button base] unless m{yo} defined with value to overide default
:# - Defaults to Column 1 if m{x} is not defined with a column value.
:# - m{\c} overides m{x} to value of the new column. %Menu% macro resets m{x} to 2 as default x pos after use.
:# - Button count is reset unless m{\c} is defined using substring modification of
:# - %menu% macro: Ie: %Menu:Col=15% list of options
:# - Int X pos value for new column
:# ! Note: Columns are not automatically padded for options of different lengths.
:# - Use white space in options list to pad options for buttons of equal size.
:# IE: %Menu% " short button " "A Very Much Longer Button"
If not defined m{\c} (
cls
Set "btns[i]="
Set "display.menu=Call Echo("
Set "b{i}=0"
)
If not defined m{yo} (Set "m{y}=3")Else Set /A "m{y}=m{yo}"
If not defined m{fg} (Set "m{fg}=;160;200")
If not defined m{bg} (Set "m{bg}=150;;150")
If not defined m{olc} (Set "m{olc}=33")
If defined m{\c} (Set "m{x}=!m{\c}!")
If not defined m{x} (Set "m{x}=2")
For %%v in (%*)Do (
Call :CreateButton "%%~v" !m{y}! !m{x}! "!m{fg}!" "!m{bg}!" !m{olc}! -t 2> nul
Set "display.menu=!display.menu!%%button[!b{i}!]%%"
Set /a "m{y}+=3", "b{i}+=1"
)
%display.menu%
Exit /b 0
=================================
:InputBar <button#> <Prompt> [-f]
:# Force Input via switch -f
:# Constrains display of input to the dimensions of the inout bar. Longer input may still be entered; input display
:# is limited to the last n characters, where 'n' is the length of the input bar
set "input="
Set /A "CurrIn=0", "MaxIn=!btn[%1][Len]!"
<nul Set /P "=%\E%[!btn[%1][p]!H%\E%C%\E%7"
For /f "delims=" %%v in ('Set /A "MaxIn+1"')Do <nul Set /P "=%\E%[%%vX%\E%8%\E%[?25h%\E%[?12h"
%BG.exe% cursor 100
:entryloop
Title %~2
%BG.exe% kbd
Set "key=!k[%Errorlevel%]!"
If not "!Key!" == "" (
If not "!Key!"=="Enter" (
If "!Key!"=="Backspace" (
If not !CurrIn!==0 (
%OnType%
Set "Input=!Input:~0,-1!"
Set /A "CurrIn-=1"
<nul set /p "=%\E%D %\E%D"
)Else Start /b "" %BG.exe% play "%WINDIR%\Media\Windows critical stop.wav"
)Else (
If not "!Key!"=="?" (
Echo("!Key!"|findstr.exe /lic:"home" /lic:"end" /lic:"pageup" /lic:"pagedown" /lic:"space" /lic:"tab" /lic:"left" /lic:"right" /lic:"up" /lic:"down" /lic:"delete" /lic:"escape" > nul && (
If /I "!Key!"=="escape" (Start /b "" %BG.exe% play "%WINDIR%\Media\Windows critical stop.wav")
If /I "!Key!"=="delete" (
Start /b "" %BG.exe% play "%WINDIR%\Media\recycle.wav"
Goto :InputBar
)
If /I "!Key!"=="Space" (
Set "Input=!Input! "
Set /A "CurrIn+=1"
)
) || (
Set "Input=!Input!!Key!"
Set /A "CurrIn+=1"
)
)Else (%= ? Cannot be Echoed to findstr; results in help output. =%
Set "Input=!Input!?"
Set /A "CurrIn+=1"
)
%OnType%
)
If not "!input!"=="" <nul set /p "=%\E%8!Input:~-%MaxIn%!"
Goto :entryloop
)
)
:# Key is Enter. Test -f force input switch; force input if true
If /I "%~3" == "-f" If "!input!" == "" (
Start /b "" %BG.exe% play "%WINDIR%\Media\Windows Error.wav"
Goto :InputBar
)
<nul Set /P "=%\E%[?25l%\E%8%\E%[K!btn[%1][t]:255;255;255=180;180;250!"
%BG.exe% play "%WINDIR%\Media\Windows Navigation Start.wav"
<nul Set /P "=%\E%8!btn[%1][t]!%\E%[?25l%\E%[?12l"
Set "btn{State}[%1]="
If not "!Input!"=="" Set "btn{State}[%1]=!Input!"
:# 255 char title length limit
If "!Input:~0,237!"=="" (%= Double Quote string at output to prevent code insertion =%
Title You Entered: "!Input!"
)Else If not "!Input!"=="" (
Title You Entered: "!Input:~0,239!"
)Else Title ^^! No input entered.
Exit /B 0
========
:DefKeys
Set "k[8]=Backspace"
(Set LF=^
%= empty lines above are required. =%)
rem For /l %%i in (9)Do For /F eol^=^%LF%%LF%^ delims^= %%A in ('forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(0x09"') do Set "k[9]=%%A"
Set "k[13]=Enter"& Set "k[27]=Escape"& Set "k[32]=Space"& Set "k[33]=^!"& Set ^"k[34]=""
set "i=35"
For %%k in (
"#" "$" "%%" "&" "'" "(" ")" "ASsub" "+" "," "-" "." "/"^
"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"^
":" ";" "<" "=" ">" "QMsub" "@"^
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z^
"[" "\" "]" "^^" "_" "`"^
a b c d e f g h i j k l m n o p q r s t u v w x y z^
)Do (
Set "k[!i!]=%%~k"
Set /A "i+=1"
)
Set "k[42]=*"& Set "k[63]=?"& Set "k[123]={"& Set "k[124]=|"& Set "k[125]=}"
Set "k[126]=~"& Set "k[339]=Delete"& Set "k[327]=Home"& Set "k[328]=Up"
Set "k[329]=PageUp"& Set "k[331]=Left"& Set "k[333]=Right"& Set "k[335]=End"
Set "k[336]=Down"& Set "k[337]=PageDown"
Exit /b 0
:# REQUIRED UTILITY
===============
/* BG.exe V 3.9
https://github.com/carlos-montiers/consolesoft-mirror/blob/master/bg/README.md
Copyright (C) 2010-2018 Carlos Montiers Aguilera
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Carlos Montiers Aguilera
cmontiers@gmail.com
*/
-----BEGIN CERTIFICATE-----
TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABQRQAATAEEAG3tp1sAAAAA
AAAAAOAADwMLAQIZABoAAAAIAAAAAgAAcCcAAAAQAAAAAMD/AABAAAAQAAAAAgAA
BAAAAAEAAAAEAAAAAAAAAABgAAAABAAAu00AAAMAAAAAACAAABAAAAAAEAAAEAAA
AAAAABAAAAAAAAAAAAAAAABQAABMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAD4UAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAA
IBkAAAAQAAAAGgAAAAQAAAAAAAAAAAAAAAAAACAAUGAucmRhdGEAALgBAAAAMAAA
AAIAAAAeAAAAAAAAAAAAAAAAAABAAGBALmJzcwAAAACMAAAAAEAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAgABgwC5pZGF0YQAATAQAAABQAAAABgAAACAAAAAAAAAAAAAA
AAAAAEAAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
/yU8UUAAkJD/JThRQACQkP8lNFFAAJCQ/yUwUUAAkJD/JSxRQACQkP8lKFFAAJCQ
/yUkUUAAkJD/JSBRQACQkP8lHFFAAJCQ/yUYUUAAkJD/JRRRQACQkP8lEFFAAJCQ
/yUMUUAAkJD/JQhRQACQkP8lBFFAAJCQ/yUAUUAAkJD/JfxQQACQkP8l+FBAAJCQ
/////wAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
QwBPAE4ATwBVAFQAJAAAAEsARQBSAE4ARQBMADMAMgAuAEQATABMAAAAU2V0Q3Vy
cmVudENvbnNvbGVGb250RXgAVABlAHIAbQBpAG4AYQBsAAAAJQBkACAAJQBkACAA
JQBkACAAJQBkACAAJQBkACAAJQBkACAAJQBkACAAJQBkAAoAAABDAE8ATgBJAE4A
JAAAACUAZAAgACUAZAAKAAAAAABQAFIASQBOAFQAAABGAEMAUABSAEkATgBUAAAA
QwBPAEwATwBSAAAATABPAEMAQQBUAEUAAABMAEEAUwBUAEsAQgBEAAAASwBCAEQA
AABNAE8AVQBTAEUAAABEAEEAVABFAFQASQBNAEUAAABTAEwARQBFAFAAAABDAFUA
UgBTAE8AUgAAAEYATwBOAFQAAABQAEwAQQBZAAAAAACkMEAAACZAALAwQACAG0AA
wDBAANAaQADMMEAAwBlAANowQABgGUAA6jBAABAZQADyMEAAIBhAAP4wQACwF0AA
EDFAAGAXQAAcMUAAYBZAACoxQAAwFEAANDFAAIATQABHQ0M6ICh0ZG02NC0xKSA1
LjEuMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkUAAAAAAAAAAAAADcUwAA
+FAAALBQAAAAAAAAAAAAACBUAABEUQAA6FAAAAAAAAAAAAAAMFQAAHxRAADwUAAA
AAAAAAAAAABAVAAAhFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjFEAAJpRAACoUQAA
tlEAAMRRAADcUQAA7lEAAAxSAAAcUgAALlIAAD5SAABSUgAAalIAAIZSAACYUgAA
qlIAAMRSAADMUgAAAAAAAOJSAAD0UgAA/lIAAAhTAAAQUwAAGlMAACZTAAAyUwAA
PFMAAEhTAABUUwAAXlMAAGhTAAAAAAAAclMAAAAAAACEUwAAAAAAAIxRAACaUQAA
qFEAALZRAADEUQAA3FEAAO5RAAAMUgAAHFIAAC5SAAA+UgAAUlIAAGpSAACGUgAA
mFIAAKpSAADEUgAAzFIAAAAAAADiUgAA9FIAAP5SAAAIUwAAEFMAABpTAAAmUwAA
MlMAADxTAABIUwAAVFMAAF5TAABoUwAAAAAAAHJTAAAAAAAAhFMAAAAAAABTAENs
b3NlSGFuZGxlAJIAQ3JlYXRlRmlsZVcAGgFFeGl0UHJvY2VzcwBkAUZyZWVMaWJy
YXJ5AKQBR2V0Q29uc29sZUN1cnNvckluZm8AALABR2V0Q29uc29sZU1vZGUAALYB
R2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8AAAQCR2V0TG9jYWxUaW1lAABFAkdl
dFByb2NBZGRyZXNzAAAsA0xvYWRMaWJyYXJ5VwAApQNSZWFkQ29uc29sZUlucHV0
VwDzA1NldENvbnNvbGVDdXJzb3JJbmZvAAD1A1NldENvbnNvbGVDdXJzb3JQb3Np
dGlvbgAA9wNTZXRDb25zb2xlRm9udAAAAQRTZXRDb25zb2xlTW9kZQAACgRTZXRD
b25zb2xlVGV4dEF0dHJpYnV0ZQB0BFNsZWVwAOwEV3JpdGVDb25zb2xlT3V0cHV0
VwB3AF9fd2dldG1haW5hcmdzAAAFAV9maWxlbm8AOwFfZ2V0Y2gAAGEBX2lvYgAA
xAFfa2JoaXQAALUCX3NldG1vZGUAAI0DX3djc2ljbXAAAEsEZnB1dHdjAAB1BGlz
d2N0eXBlAACqBHNldGxvY2FsZQD0BHdjc2NweQAABwV3Y3N0b2wAAA4Fd3ByaW50
ZgDIAU9lbVRvQ2hhckJ1ZmZXAAAJAFBsYXlTb3VuZFcAAAAAAFAAAABQAAAAUAAA
AFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAA
AFAAAABQAAAAUAAAS0VSTkVMMzIuZGxsAAAAABRQAAAUUAAAFFAAABRQAAAUUAAA
FFAAABRQAAAUUAAAFFAAABRQAAAUUAAAFFAAABRQAABtc3ZjcnQuZGxsAAAoUAAA
VVNFUjMyLmRsbAAAPFAAAFdJTk1NLkRMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-----END CERTIFICATE-----
=================
:Main script body
Setlocal EnableDelayedExpansion
Call :DefKeys
:# USAGE EXAMPLES // Your script below
%BG.exe% Font 9
:# buttons containing only whitespace in their text string are identified by qInput macro as Input bars
:# using findstr regex.
Call :createButton " " 2 2 "0;0;0" "255;255;255" "36" -t
Set /A "m{yo}=5", "m{\C}=2" %= define initial Y;X values of menu column =%
%Menu:Col=2% "Option 1" "Option 2" "Option 3"
%Menu:Col=l[X]% "Option 4" "Option 5" "Option 6"
%Menu:Col=l[X]% "Option 7" "Option 8" "Option 9"
Call :createButton "Click Me" 14 2 -t
Call :createButton "{ Or Me }" !l[Y]! !l[X]! -t
Call :createButton "Exit" 17 2 "200;;" "155;155;255" "48;2;60;;"
Call :createButton "Reset" 17 !l[X]! "200;;" "155;155;255" "48;2;;;100"
Call :createButton "Show Values" 17 !l[X]! "200;;" "155;155;255" "48;2;;90;"
<nul set /p "=%\E%[?25l"
:refresh
%dButtons%
:loop
%GetClick%
%qClicked% If defined ValidClick (
Title Clicked Button !ValidClick! : "!Clicked: =!"
If "!Clicked!"=="Exit" (
<nul Set /P "=%\E%[!btn[Y]!d%\E%[G"
Goto :End
)
If "!Clicked!"=="Reset" (
Endlocal
Goto :main
)
If "!Clicked!"=="Show Values" (
%Buffer:@=Alt%
%dValues%
Pause
%Buffer:@=Main%
Goto :loop
)
%qInput% "Enter something:" -f
)Else Title Clicked: !C{Pos}!
Goto :loop
您好,我想知道是否有一种简单的方法可以在批处理文件中制作可点击的文本按钮。我看到人们在使用它们,所以我很确定这是可能的。
我想制作一个按钮来简单地激活 goto test1
命令。
是的。它 is.There 很少 options.I 从第一个开始,然后编辑更多的答案。
1) 使用 IExpress。 Here's a link to example Yes/No pop-up。您可以使用 FOR /F 处理结果并决定要做什么。在脚本的开头你可以设置标题和问题:
for /f %%a in ('iexpYNButton.bat') do set ans=%%a
if %ans% equ yes (
do something
)
2) With MSHTA - 这又是 Yes/No pop-up
for /f "tokens=3 delims=: " %%a in ('choose.bat') do @set ans=%%a
if %ans% equ yep (
do something
)
这里有一个使用 Carlos Aguilera 的 BG.exe(包含)等待和读取鼠标点击的方法。
包含许多函数和宏以简化自定义按钮的创建及其使用。脚本末尾的 :main
标签中包含一个用法示例。
@Echo off & CD /d "%~dp0"
CLS
:# Based on: https://www.dostips.com/forum/viewtopic.php?f=3&t=9222
:# example begins at 'main' label at end of file
If not exist "%TEMP%\Games_By_T3RRY\" MD "%TEMP%\Games_By_T3RRY"
If not exist "%TEMP%\Games_By_T3RRY\BG.exe" Certutil -decode "%~f0" "%TEMP%\Games_By_T3RRY\BG.exe" > nul
Set BG.exe="%TEMP%\Games_By_T3RRY\BG.exe"
Set "reg.restore=(Call )"
:# disable QuickEdit if enabled. Restored at :end label if disabled by script
reg query HKEY_CURRENT_USER\console\ /v Quickedit | findstr.exe /l "0x1" > nul && (
(Reg add HKEY_CURRENT_USER\console\ /v QuickEdit /t REG_DWORD /d 0x0 /f) > nul
Set "reg.restore=Reg add HKEY_CURRENT_USER\console\ /v QuickEdit /t REG_DWORD /d 0x1 /f"
)
For /f "tokens=4 Delims=: " %%C in ('CHCP')Do Set "active.cp=%%C"
chcp 65001 > nul
For /f %%e in ('echo prompt $E^|cmd')Do Set \E=%%e
If "!!" == "" (Echo DelayedExpansion must not be enabled before macro definitions&Pause & Exit /B 1)
:# Alt: %Buffer:@=Alt% Main: %Buffer:@=Main%
Set "Buffer=<nul set /p "=%\E%[?1049!@!""
Set "Alt=h"
Set "Main=l"
:# button sound fx. disable by undefining buttonsfx below ; prior to definition of OnCLick macro
Set "buttonsfx=On"
%BG.exe% Play "%WINDIR%\Media\Windows Feed Discovered.wav"
Set "OnClick=(Call )"
Set "OnType=(Call )"
If defined buttonsfx (
For /f "Delims=" %%G in ('Dir /b /s "%WINDIR%\SystemApps\*KbdKeyTap.wav"')Do If exist "%%~G" Set "OnClick=(Start /b "" %BG.exe% Play "%%~G")"
Set "OnType=(start /b "" %BG.exe% Play "%WINDIR%\Media\Windows Feed Discovered.wav")"
)
:# return button click coords in c{pos} variable n Y;X format
Set "GetClick=Set "Clicked="& Set "ValidClick="& for /f "tokens=1,2" %%X in ('%BG.exe% mouse')Do (Set /A "c{pos}=%%X+1"&Set "c{pos}=%%Y;!c{Pos}!")"
:# test substituted button # if click is within btn[#][coords] defines variables: Clicked [value eq string] ; ValidClick [value eq button number / undefined]; btn{State}[#] [value eq true/false]
Set "If.Button=For /f "Tokens=1,2 Delims=;" %%X in ("!c{pos}!")Do If not "!btn[#][Coords]:[%%Y;%%X]=!" == "!btn[#][Coords]!" Set "Clicked=!btn[#][string]!"& Set "ValidClick=#"& (If defined btn[#]{t} Call :Toggle #)& "
:# tests all buttons in same way as if.clicked ; exclude a button via substring modification substituting 'exc' for 'button#'
Set "qClicked=(For /l %%i in (1 1 !btns[i]!)Do If not "%%i"=="Exc" For /f "Tokens=1,2 Delims=;" %%X in ("!c{pos}!")Do If not "!btn[%%i][Coords]:[%%Y;%%X]=!" == "!btn[%%i][Coords]!" Set "Clicked=!btn[%%i][string]!"& Set "ValidClick=%%i"& %OnClick% & (If defined btn[%%i]{t} Call :Toggle %%i))& "
:# Id if button is an input bar. Requires additional Args. Optional -f switch forces input
:# Usage: %qInput% <Prompt> [-f]
Set qInput=Set "Input="^& Echo({!Clicked!}^|findstr /RC:"\<[{][ ]*[}]\>" ^> nul ^&^& Call :InputBar !ValidClick!
:# display all buttons
Set "dButtons=For /l %%i In (1 1 !btns[i]!)Do <nul Set /P "=!btn[%%i]!""
:# Undefine all buttons. Use substring modification to exclude a specific button or states from being undefined.
:# IE Preserve button 1: %clrButtons:$EXC=btn[1]%
Set "clrButtons=(For /f "tokens=1 Delims==" %%G In ('Set btn')Do Echo("%%G"|findstr /Lic:"$EXC" || Set "%%G=") 2> nul & CLS"
:# displays all selected button or input values
Set "dValues=For /l %%i in (1 1 !btns[i]!)Do if defined btn{State}[%%i] (set "value=%\E%[0;7m!btn{State}[%%i]:true=%\E%[0;32mtrue!"& Echo(%\E%[33mButton[%%i]%\E%[36m=!value:false=%\E%[0;90mfalse!%\E%[0m)"
:# menu macro for easily creating multiple buttons simultaneously
Set "CHash=Col"
set "menu=Set "m{\c}="& For %%n in (1 2)Do if %%n==2 ((If "!CHash!"=="Col" (Set "m{\c}="&Call:createmenu !Params! 2> nul )Else (Set /A "m{\c}=Col"&Call :Createmenu ^!Params^! 2> nul ))& Set "m{\c}="&Set "m{x}=2")Else Set Params="
==========
Goto :Main
==========
:# FUNCTIONS
====
:end
(%Reg.Restore%) > nul
(Title )
<nul set /p "=%\E%[?25h"
CHCP %active.cp% > nul
Endlocal
Goto :Eof
=================
:Toggle <button#>
If "!btn{State}[%~1]!"=="true" (
<nul set /P "=!btn[%~1]!"
Set "btn{State}[%~1]=false"
)Else (
<nul set /P "=!btn[%~1]:48=7;48!"
Set "btn{State}[%~1]=true"
)
Exit /b 0
:createGrid <Character> <Min> <Max> <FGcol> <BGcol> <BTNcol>
Set "Char=%~1"
For /L %%Y in (%~2 3 %~3)Do For /L %%X in (%~2 3 %~3)Do Call:CreateButton "!Char:~0,1!" %%Y %%X "%~4" "%~5" "%~6" -t
Goto :Eof
==========================================================
:createbutton <string> <y> <x> <FGcol> <BGcol> <BTNcol> -t
:# Arg Structure: 1,2,3 = Mandatory ; 4,5,6 = Optional ; -t = Optional switch. Must be Last arg if present.
:# Button Border ; Recommended font: Lucida Console
:# Codepage: 65001
:# alt 201 alt 205 alt 187 ╔═╗
:# alt 186 space alt 186 ║ ║
:# alt 200 alt 205 alt 188 ╚═╝
Set "l[Y]=!btn[Y]!"
If not "%~2"=="!btn[Y]!" Set /A "btn[Y]=%~2+3"
If "%~3" == "" Exit /b 1
Set /a "btns[i]+=1+0"
Set "btn[%btns[i]%][p]=%~2;%~3"
Set "btn[%btns[i]%][string]=%~1"
If /I "%~4" == "-t" (set "btn[BG]=%\E%[48;2;230;230;200m")Else (If "%~4" == "" (set "btn[BG]=%\E%[48;2;230;230;200m")Else set "btn[BG]=%\E%[38;2;%~4m")
If /I "%~5" == "-t" (set "btn[FG]=%\E%[38;2;;;m")Else (If "%~5" == "" (set "btn[FG]=%\E%[38;2;;;m")Else set "btn[FG]=%\E%[48;2;%~5m")
If /I "%~6" == "-t" (set "btn[Col]=%\E%[90m")Else (If "%~6" == "" (set "btn[Col]=%\E%[90m")Else set "btn[Col]=%\E%[%~6m")
:# defines variable identifying button as toggle button; used by %If.Button% and %qClicked% macros
Echo("%*"|findstr /lic:"-t" > nul && Set "btn[%btns[i]%]{t}=true" || Set "btn[%btns[i]%]{t}="
:# Constrain button creation to console dimensions
For /f "Tokens=1,2 Delims=: " %%G in ('Mode^|findstr /lic:"Columns" /lic:"Lines"')Do (
Set /A "%%G=%%H"
If /I "%%G"=="Columns" ( Set /A "%%G[max]=%%H+%~3+2" )Else Set /A "%%G[max]=%%H"
)
Set "len="& set "s=#%~1" & ( for %%P in (8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do ( if "!s:~%%P,1!" NEQ "" ( set /a "len+=%%P" & set "s=!s:~%%P!" ))) & set /a "btn[%btns[i]%][Len]=len" 2>nul
If !len! GTR !Columns[Max]! (
Echo(Button length exceeds display width. Button width must be LSS than console Columns
Pause
Exit
)
If %~2 GEQ !Lines[Max]! (
Echo(Button height exceeds display height. Button height must be LSS than console Lines
Pause
Exit
)
:# define button click coords and button Upper / lower border display values
:# - border is not defined as clickable.
Set /A "btn{Xmin}=%3+1", "btn{Xmax}=%3+len", "l[X]=btn{Xmax}+2"
Set "btn[%btns[i]%][Len]=" & Set "btn[%btns[i]%][S]=" & Set "btn[%btns[i]%][coords]="
For /l %%i in (!btn{Xmin}! 1 !btn{Xmax}!)Do (
Set /A "btn[%btns[i]%][Len]=%%i-3", "Xoffset=%%i-1"
Set "btn[%btns[i]%][coords]=!btn[%btns[i]%][coords]![%2;!Xoffset!]"
Set "btn[%btns[i]%][Bar]=!btn[%btns[i]%][Bar]!═"
Set "btn[%btns[i]%][S]=!btn[%btns[i]%][S]! "
)
:# define toggle state variable
If defined btn[%btns[i]%]{t} Set "btn{State}[%btns[i]%]=false"
:# Button Graphic. Toggle is effected by substituting Background color VT code 48 with 7;48 to invert button text color.
Set "btn[%btns[i]%]=%\E%[%2;%3H%Btn[col]%%\E%7║%\E%8%\E%A╔!btn[%btns[i]%][Bar]!╗%\E%8%\E%B╚!btn[%btns[i]%][Bar]!╝%\E%8%\E%C%\E%[0m!btn[FG]!!btn[BG]!!btn[%btns[i]%][String]!%\E%[0m%btn[col]%║%\E%[0m%\E%[2E%\E%7"
Set "btn[%btns[i]%][t]=%\E%[0m!btn[FG]!!btn[BG]!!btn[%btns[i]%][String]!%\E%[0m%btn[col]%║%\E%[0m%\E%[K"
Exit /b 0
==========================================
:createMenu <"list" "of" "button strings">
:# Associated Macro: %Menu%
:# - Uses default values for button color schemes m{fg} m{bg} and m{olc}
:# - Define the value of those variables prior to calling :createMenu
:# to the desired color scheme if you wish to override default values.
:# - Defaults to Row 3 [button base] unless m{yo} defined with value to overide default
:# - Defaults to Column 1 if m{x} is not defined with a column value.
:# - m{\c} overides m{x} to value of the new column. %Menu% macro resets m{x} to 2 as default x pos after use.
:# - Button count is reset unless m{\c} is defined using substring modification of
:# - %menu% macro: Ie: %Menu:Col=15% list of options
:# - Int X pos value for new column
:# ! Note: Columns are not automatically padded for options of different lengths.
:# - Use white space in options list to pad options for buttons of equal size.
:# IE: %Menu% " short button " "A Very Much Longer Button"
If not defined m{\c} (
cls
Set "btns[i]="
Set "display.menu=Call Echo("
Set "b{i}=0"
)
If not defined m{yo} (Set "m{y}=3")Else Set /A "m{y}=m{yo}"
If not defined m{fg} (Set "m{fg}=;160;200")
If not defined m{bg} (Set "m{bg}=150;;150")
If not defined m{olc} (Set "m{olc}=33")
If defined m{\c} (Set "m{x}=!m{\c}!")
If not defined m{x} (Set "m{x}=2")
For %%v in (%*)Do (
Call :CreateButton "%%~v" !m{y}! !m{x}! "!m{fg}!" "!m{bg}!" !m{olc}! -t 2> nul
Set "display.menu=!display.menu!%%button[!b{i}!]%%"
Set /a "m{y}+=3", "b{i}+=1"
)
%display.menu%
Exit /b 0
=================================
:InputBar <button#> <Prompt> [-f]
:# Force Input via switch -f
:# Constrains display of input to the dimensions of the inout bar. Longer input may still be entered; input display
:# is limited to the last n characters, where 'n' is the length of the input bar
set "input="
Set /A "CurrIn=0", "MaxIn=!btn[%1][Len]!"
<nul Set /P "=%\E%[!btn[%1][p]!H%\E%C%\E%7"
For /f "delims=" %%v in ('Set /A "MaxIn+1"')Do <nul Set /P "=%\E%[%%vX%\E%8%\E%[?25h%\E%[?12h"
%BG.exe% cursor 100
:entryloop
Title %~2
%BG.exe% kbd
Set "key=!k[%Errorlevel%]!"
If not "!Key!" == "" (
If not "!Key!"=="Enter" (
If "!Key!"=="Backspace" (
If not !CurrIn!==0 (
%OnType%
Set "Input=!Input:~0,-1!"
Set /A "CurrIn-=1"
<nul set /p "=%\E%D %\E%D"
)Else Start /b "" %BG.exe% play "%WINDIR%\Media\Windows critical stop.wav"
)Else (
If not "!Key!"=="?" (
Echo("!Key!"|findstr.exe /lic:"home" /lic:"end" /lic:"pageup" /lic:"pagedown" /lic:"space" /lic:"tab" /lic:"left" /lic:"right" /lic:"up" /lic:"down" /lic:"delete" /lic:"escape" > nul && (
If /I "!Key!"=="escape" (Start /b "" %BG.exe% play "%WINDIR%\Media\Windows critical stop.wav")
If /I "!Key!"=="delete" (
Start /b "" %BG.exe% play "%WINDIR%\Media\recycle.wav"
Goto :InputBar
)
If /I "!Key!"=="Space" (
Set "Input=!Input! "
Set /A "CurrIn+=1"
)
) || (
Set "Input=!Input!!Key!"
Set /A "CurrIn+=1"
)
)Else (%= ? Cannot be Echoed to findstr; results in help output. =%
Set "Input=!Input!?"
Set /A "CurrIn+=1"
)
%OnType%
)
If not "!input!"=="" <nul set /p "=%\E%8!Input:~-%MaxIn%!"
Goto :entryloop
)
)
:# Key is Enter. Test -f force input switch; force input if true
If /I "%~3" == "-f" If "!input!" == "" (
Start /b "" %BG.exe% play "%WINDIR%\Media\Windows Error.wav"
Goto :InputBar
)
<nul Set /P "=%\E%[?25l%\E%8%\E%[K!btn[%1][t]:255;255;255=180;180;250!"
%BG.exe% play "%WINDIR%\Media\Windows Navigation Start.wav"
<nul Set /P "=%\E%8!btn[%1][t]!%\E%[?25l%\E%[?12l"
Set "btn{State}[%1]="
If not "!Input!"=="" Set "btn{State}[%1]=!Input!"
:# 255 char title length limit
If "!Input:~0,237!"=="" (%= Double Quote string at output to prevent code insertion =%
Title You Entered: "!Input!"
)Else If not "!Input!"=="" (
Title You Entered: "!Input:~0,239!"
)Else Title ^^! No input entered.
Exit /B 0
========
:DefKeys
Set "k[8]=Backspace"
(Set LF=^
%= empty lines above are required. =%)
rem For /l %%i in (9)Do For /F eol^=^%LF%%LF%^ delims^= %%A in ('forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(0x09"') do Set "k[9]=%%A"
Set "k[13]=Enter"& Set "k[27]=Escape"& Set "k[32]=Space"& Set "k[33]=^!"& Set ^"k[34]=""
set "i=35"
For %%k in (
"#" "$" "%%" "&" "'" "(" ")" "ASsub" "+" "," "-" "." "/"^
"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"^
":" ";" "<" "=" ">" "QMsub" "@"^
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z^
"[" "\" "]" "^^" "_" "`"^
a b c d e f g h i j k l m n o p q r s t u v w x y z^
)Do (
Set "k[!i!]=%%~k"
Set /A "i+=1"
)
Set "k[42]=*"& Set "k[63]=?"& Set "k[123]={"& Set "k[124]=|"& Set "k[125]=}"
Set "k[126]=~"& Set "k[339]=Delete"& Set "k[327]=Home"& Set "k[328]=Up"
Set "k[329]=PageUp"& Set "k[331]=Left"& Set "k[333]=Right"& Set "k[335]=End"
Set "k[336]=Down"& Set "k[337]=PageDown"
Exit /b 0
:# REQUIRED UTILITY
===============
/* BG.exe V 3.9
https://github.com/carlos-montiers/consolesoft-mirror/blob/master/bg/README.md
Copyright (C) 2010-2018 Carlos Montiers Aguilera
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Carlos Montiers Aguilera
cmontiers@gmail.com
*/
-----BEGIN CERTIFICATE-----
TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABQRQAATAEEAG3tp1sAAAAA
AAAAAOAADwMLAQIZABoAAAAIAAAAAgAAcCcAAAAQAAAAAMD/AABAAAAQAAAAAgAA
BAAAAAEAAAAEAAAAAAAAAABgAAAABAAAu00AAAMAAAAAACAAABAAAAAAEAAAEAAA
AAAAABAAAAAAAAAAAAAAAABQAABMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAD4UAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAA
IBkAAAAQAAAAGgAAAAQAAAAAAAAAAAAAAAAAACAAUGAucmRhdGEAALgBAAAAMAAA
AAIAAAAeAAAAAAAAAAAAAAAAAABAAGBALmJzcwAAAACMAAAAAEAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAgABgwC5pZGF0YQAATAQAAABQAAAABgAAACAAAAAAAAAAAAAA
AAAAAEAAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
/yU8UUAAkJD/JThRQACQkP8lNFFAAJCQ/yUwUUAAkJD/JSxRQACQkP8lKFFAAJCQ
/yUkUUAAkJD/JSBRQACQkP8lHFFAAJCQ/yUYUUAAkJD/JRRRQACQkP8lEFFAAJCQ
/yUMUUAAkJD/JQhRQACQkP8lBFFAAJCQ/yUAUUAAkJD/JfxQQACQkP8l+FBAAJCQ
/////wAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
QwBPAE4ATwBVAFQAJAAAAEsARQBSAE4ARQBMADMAMgAuAEQATABMAAAAU2V0Q3Vy
cmVudENvbnNvbGVGb250RXgAVABlAHIAbQBpAG4AYQBsAAAAJQBkACAAJQBkACAA
JQBkACAAJQBkACAAJQBkACAAJQBkACAAJQBkACAAJQBkAAoAAABDAE8ATgBJAE4A
JAAAACUAZAAgACUAZAAKAAAAAABQAFIASQBOAFQAAABGAEMAUABSAEkATgBUAAAA
QwBPAEwATwBSAAAATABPAEMAQQBUAEUAAABMAEEAUwBUAEsAQgBEAAAASwBCAEQA
AABNAE8AVQBTAEUAAABEAEEAVABFAFQASQBNAEUAAABTAEwARQBFAFAAAABDAFUA
UgBTAE8AUgAAAEYATwBOAFQAAABQAEwAQQBZAAAAAACkMEAAACZAALAwQACAG0AA
wDBAANAaQADMMEAAwBlAANowQABgGUAA6jBAABAZQADyMEAAIBhAAP4wQACwF0AA
EDFAAGAXQAAcMUAAYBZAACoxQAAwFEAANDFAAIATQABHQ0M6ICh0ZG02NC0xKSA1
LjEuMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkUAAAAAAAAAAAAADcUwAA
+FAAALBQAAAAAAAAAAAAACBUAABEUQAA6FAAAAAAAAAAAAAAMFQAAHxRAADwUAAA
AAAAAAAAAABAVAAAhFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjFEAAJpRAACoUQAA
tlEAAMRRAADcUQAA7lEAAAxSAAAcUgAALlIAAD5SAABSUgAAalIAAIZSAACYUgAA
qlIAAMRSAADMUgAAAAAAAOJSAAD0UgAA/lIAAAhTAAAQUwAAGlMAACZTAAAyUwAA
PFMAAEhTAABUUwAAXlMAAGhTAAAAAAAAclMAAAAAAACEUwAAAAAAAIxRAACaUQAA
qFEAALZRAADEUQAA3FEAAO5RAAAMUgAAHFIAAC5SAAA+UgAAUlIAAGpSAACGUgAA
mFIAAKpSAADEUgAAzFIAAAAAAADiUgAA9FIAAP5SAAAIUwAAEFMAABpTAAAmUwAA
MlMAADxTAABIUwAAVFMAAF5TAABoUwAAAAAAAHJTAAAAAAAAhFMAAAAAAABTAENs
b3NlSGFuZGxlAJIAQ3JlYXRlRmlsZVcAGgFFeGl0UHJvY2VzcwBkAUZyZWVMaWJy
YXJ5AKQBR2V0Q29uc29sZUN1cnNvckluZm8AALABR2V0Q29uc29sZU1vZGUAALYB
R2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8AAAQCR2V0TG9jYWxUaW1lAABFAkdl
dFByb2NBZGRyZXNzAAAsA0xvYWRMaWJyYXJ5VwAApQNSZWFkQ29uc29sZUlucHV0
VwDzA1NldENvbnNvbGVDdXJzb3JJbmZvAAD1A1NldENvbnNvbGVDdXJzb3JQb3Np
dGlvbgAA9wNTZXRDb25zb2xlRm9udAAAAQRTZXRDb25zb2xlTW9kZQAACgRTZXRD
b25zb2xlVGV4dEF0dHJpYnV0ZQB0BFNsZWVwAOwEV3JpdGVDb25zb2xlT3V0cHV0
VwB3AF9fd2dldG1haW5hcmdzAAAFAV9maWxlbm8AOwFfZ2V0Y2gAAGEBX2lvYgAA
xAFfa2JoaXQAALUCX3NldG1vZGUAAI0DX3djc2ljbXAAAEsEZnB1dHdjAAB1BGlz
d2N0eXBlAACqBHNldGxvY2FsZQD0BHdjc2NweQAABwV3Y3N0b2wAAA4Fd3ByaW50
ZgDIAU9lbVRvQ2hhckJ1ZmZXAAAJAFBsYXlTb3VuZFcAAAAAAFAAAABQAAAAUAAA
AFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAA
AFAAAABQAAAAUAAAS0VSTkVMMzIuZGxsAAAAABRQAAAUUAAAFFAAABRQAAAUUAAA
FFAAABRQAAAUUAAAFFAAABRQAAAUUAAAFFAAABRQAABtc3ZjcnQuZGxsAAAoUAAA
VVNFUjMyLmRsbAAAPFAAAFdJTk1NLkRMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-----END CERTIFICATE-----
=================
:Main script body
Setlocal EnableDelayedExpansion
Call :DefKeys
:# USAGE EXAMPLES // Your script below
%BG.exe% Font 9
:# buttons containing only whitespace in their text string are identified by qInput macro as Input bars
:# using findstr regex.
Call :createButton " " 2 2 "0;0;0" "255;255;255" "36" -t
Set /A "m{yo}=5", "m{\C}=2" %= define initial Y;X values of menu column =%
%Menu:Col=2% "Option 1" "Option 2" "Option 3"
%Menu:Col=l[X]% "Option 4" "Option 5" "Option 6"
%Menu:Col=l[X]% "Option 7" "Option 8" "Option 9"
Call :createButton "Click Me" 14 2 -t
Call :createButton "{ Or Me }" !l[Y]! !l[X]! -t
Call :createButton "Exit" 17 2 "200;;" "155;155;255" "48;2;60;;"
Call :createButton "Reset" 17 !l[X]! "200;;" "155;155;255" "48;2;;;100"
Call :createButton "Show Values" 17 !l[X]! "200;;" "155;155;255" "48;2;;90;"
<nul set /p "=%\E%[?25l"
:refresh
%dButtons%
:loop
%GetClick%
%qClicked% If defined ValidClick (
Title Clicked Button !ValidClick! : "!Clicked: =!"
If "!Clicked!"=="Exit" (
<nul Set /P "=%\E%[!btn[Y]!d%\E%[G"
Goto :End
)
If "!Clicked!"=="Reset" (
Endlocal
Goto :main
)
If "!Clicked!"=="Show Values" (
%Buffer:@=Alt%
%dValues%
Pause
%Buffer:@=Main%
Goto :loop
)
%qInput% "Enter something:" -f
)Else Title Clicked: !C{Pos}!
Goto :loop