
标题: [其他] 在批处理文件输出一个弹窗,但是不会在任务栏显示 [打印本页]
作者: WindCat 时间: 2017-5-24 02:40 标题: 在批处理文件输出一个弹窗,但是不会在任务栏显示
请问下这个还有什么需要修改/缩减/优化的吗?(弄这个的我到底有多闲)
exe是用Bat_To_Exe_Converter 生成的
将CmdMsgbox_install.bat生成exe时注意打包CmdMsgBox.exe,且勾选工作目录为临时目录
[attach]10643[/attach]主程序exe下载
[attach]10644[/attach]安装版exe下载
CmdMsgBox Code- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- :hta Cmd MsgBox
- ::
- :: 作者:Neko Piao, 2017-05-21. 版本 %CmdMsgBoxver%
- ::
- :: 功能:在批处理文件输出一个弹窗,但是不会在任务栏显示
- :: 仅测试于 Win10.
- ::
- :: 参数:%1~%9 输出的内容(最后一个为标题)
- ::
- :: 第一个参数为-? 则显示帮助
- ::
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- @echo off
- if /i not "%~nx0"=="CmdMsgbox.exe" (echo 请将%~nx0重命名为CmdMsgbox.exe再执行&echo 按任意键退出&pause>nul&exit)
-
- set CmdMsgBoxver=1.170524.0109
-
- setlocal ENABLEEXTENSIONS
- set parameter0=0
- set parameter1=%1
- set parameter2=%2
- set parameter3=%3
- set parameter4=%4
- set parameter5=%5
- set parameter6=%6
- set parameter7=%7
- set parameter8=%8
- set parameter9=%9
-
-
-
- set str=%parameter1%
-
- if defined str (
- set /a parameter0=%parameter0%+1
- ) else (goto:keeptoPrt01)
-
- set str=%parameter2%
-
- if defined str (
- set /a parameter0=%parameter0%+1
- ) else (goto:keeptoPrt01)
-
- set str=%parameter3%
-
- if defined str (
- set /a parameter0=%parameter0%+1
- ) else (goto:keeptoPrt01)
-
- set str=%parameter4%
-
- if defined str (
- set /a parameter0=%parameter0%+1
- ) else (goto:keeptoPrt01)
-
- set str=%parameter5%
-
- if defined str (
- set /a parameter0=%parameter0%+1
- ) else (goto:keeptoPrt01)
-
-
- set str=%parameter6%
- if defined str (
- set /a parameter0=%parameter0%+1
- ) else (goto:keeptoPrt01)
-
-
- set str=%parameter7%
- if defined str (
- set /a parameter0=%parameter0%+1
- ) else (goto:keeptoPrt01)
-
-
- set str=%parameter8%
- if defined str (
- set /a parameter0=%parameter0%+1
- ) else (goto:keeptoPrt01)
-
-
- set str=%parameter9%
- if defined str (
- set /a parameter0=%parameter0%+1
- ) else (goto:keeptoPrt01)
-
-
-
- :keeptoPrt01
- if "%parameter1%"=="-?" (GOTO:TheHelp)
- if "%parameter1%"=="" (GOTO:vermsg)
- if /i "%parameter1%"=="vernum" (GOTO:vernum) else (goto:TheStart)
-
-
- :vernum
- Echo %CmdMsgBoxver%
- goto:TheEnd
-
- :vermsg
- Echo.Cmd Msgbox [版本 %CmdMsgBoxver%]
- Echo.BY:Neko Piao 保留所有权利。
- goto:TheEnd
-
-
- :TheHelp
-
- Echo. 弹窗提示消息,同时暂停
- Echo. 最后一个参数自动将成为弹窗标题
- Echo.
- Echo. %~n0 ["Msg1"] ["Msg2"] ......
- Echo.
- Echo. 例:
- Echo. %~n0 "第一行" "第二行" "标题"
- Echo.
- Echo. 注: 因技术原因,第一个变量
- Echo. 即第一行不可包含空格或其他可能产生bug的字符
- Echo. 但除去第一行以外的都[应该]可以使用各种字符.
- Echo. 少部分冲突字符依然不可用.
- Echo.
- Echo.
- Echo. 若要显示当前CmdMsgBox版本信息,请键入不带参数的 CmdMsgBox
-
- goto:eof
-
- :TheStart
- set inoutfiletimename=%time:~0,2%.%time:~3,1%%time:~4,1%.%time:~6,1%%time:~7,1%.%time:~9,1%%time:~10,1%
-
- Echo.^<html^>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
- Echo.^<head^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
- Echo.^<title^>%temp%\CmdMsgbox_"%inoutfiletimename%".hta^</title^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
- Echo.^<script type="text/vbscript"^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
-
- ::核心部分
- ::弹窗语句输出判断
- ::利用用户输入的参数判断剩余信息的读取
- Set parameter_num_sum=%parameter0%
- set parametertemp=0
- :Start
- ::输出语句小于最大语句标签数
- if %parametertemp% LSS %parameter_num_sum% (set /a parametertemp=%parametertemp%+1) else (goto:parameterEnd)
- set parametermsgtemp=parameter%parametertemp%
- call:%parametermsgtemp%
- goto:Start
-
-
- :parameter1
- >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="MSGBox " <nul
- >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter1%" <nul
- goto:eof
-
- :parameter2
- Call:TitleaEQU
- >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter2%" <nul
- goto:eof
-
- :parameter3
- Call:TitleaEQU
- >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter3%" <nul
- goto:eof
-
- :parameter4
- Call:TitleaEQU
- >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter4%" <nul
- goto:eof
-
- :parameter5
- Call:TitleaEQU
- >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter5%" <nul
- goto:eof
-
- :parameter6
- Call:TitleaEQU
- >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter6%" <nul
- goto:eof
-
- :parameter7
- Call:TitleaEQU
- >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter7%" <nul
- goto:eof
-
- :parameter8
- Call:TitleaEQU
- >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter8%" <nul
- goto:eof
-
- :parameter9
- Call:TitleaEQU
- >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter9%" <nul
- goto:eof
-
- :TitleaEQU
- if %parametertemp% EQU %parameter_num_sum% (>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p=",16+0," <nul )
- if %parametertemp% LSS %parameter_num_sum% (>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p=" & vbCrLf & " <nul )
- goto:eof
-
- :parameterEnd
- Echo.>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
- Echo.self.close()>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
- Echo.^</script^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
- Echo.^</head^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
- Echo.^</html^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta && Call %temp%\CmdMsgbox_"%inoutfiletimename%".hta
- Del %temp%\CmdMsgbox_"%inoutfiletimename%".hta
-
-
- endlocal
- goto:EOF
-
-
- :TheEnd
- endlocal & goto:EOF
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
复制代码
CmdMsgbox_install Code- @echo off
-
- ::call:UAC_Check
-
- Call:installverload
-
- Call:installnamecheck
-
- Call:firstinstallcheck
-
- Call:Sysverload
-
- Call:installver_or_Sysver_check
-
- Call:userselect
-
- exit
-
-
- ::名称检查
- :installnamecheck
- ::if not "%~nx0"=="CmdMsgbox_install_%instaver01%.%instaver02%.%instaver03%.exe" (echo 请将%~nx0重命名为CmdMsgbox_install_%instaver01%.%instaver02%.%instaver03%.exe再执行&echo 按任意键退出&pause>nul&exit) else (echo.)
- echo 您正在安装CmdMsgbox %instaver01%.%instaver02%.%instaver03%
- goto:eof
-
- :firstinstallcheck
- ::当磁盘不存在,则安装,否则检查版本后安装
-
- if not exist %ComSpec:~0,-7%CmdMsgbox.exe (call:install&call:installcheck&exit)
- goto:eof
-
-
- :installverload
- if not exist .\CmdMsgbox.exe echo 没有找到安装文件,按任意键退出.&pause>nul&exit
- for /f "tokens=1-3 delims=." %%a in ('.\CmdMsgbox verNum') do (
- set "instaver01=%%a"
- set "instaver02=%%b"
- set "instaver03=%%c"
- )
- set instaver00=%instaver01%%instaver02%%instaver03%
- goto:eof
-
- :Sysverload
- for /f "tokens=1-3 delims=." %%a in ('%ComSpec:~0,-7%CmdMsgbox verNum') do (
- set "SysCmdMsgboxver=%%a%%b%%c"
- set "SysCmdMsgboxver01=%%a"
- set "SysCmdMsgboxver02=%%b"
- set "SysCmdMsgboxver03=%%c"
- )
- goto:eof
-
- :installver_or_Sysver_check
- ::如果安装版本大于则直接覆盖安装
- if "%instaver00%" GTR "%SysCmdMsgboxver%" (call:install&call:installcheck&exit)
- if "%instaver00%" EQU "%SysCmdMsgboxver%" (call:uninstallselect&exit)
- goto:eof
-
- :userselect
- cls
- ECHO 您要安装的版本%instaver01%.%instaver02%.%instaver03%低于现有版本%SysCmdMsgboxver01%.%SysCmdMsgboxver02%.%SysCmdMsgboxver03%
- echo 是否继续?(Y/N)
- set /p YN=
- if /i "%YN%"=="Y" (del %ComSpec:~0,-7%CmdMsgbox.exe&call:install&call:installcheck&exit)
- if /i "%YN%"=="N" (CmdMsgbox 2 "用户取消" "安装失败"&exit) else (cls&echo 输入有误,请重新输入&goto:userselect)
-
- goto:eof
-
-
- :install
- move CmdMsgbox.exe %ComSpec:~0,-7% >nul 2>nul
- goto:eof
-
-
- :installcheck
-
- if not exist %ComSpec:~0,-7%CmdMsgbox.exe (Echo.安装失败,拷贝进程未如预期进行 &Echo. 按任意键退出&pause>nul&exit)
- set SysCmdMsgboxverlast=%SysCmdMsgboxver01%.%SysCmdMsgboxver02%.%SysCmdMsgboxver03%
- call:Sysverload
- set SysCmdMsgboxvernow=%instaver01%.%instaver02%.%instaver03%
- echo 安装成功,请查看弹窗,点击确认以完成安装.
- CmdMsgbox "安装成功" "之前版本:%SysCmdMsgboxverlast%" "现在版本:%SysCmdMsgboxvernow%" "请在Cmd中输入[CmdMsgbox -?]查看使用帮助" "安装成功"
- exit
- goto:eof
-
-
- :uninstallselect
- set UninstallCode=Uninstall%random%%random%%random%%random%%random%%random%%random%%random%%random%
- echo %UninstallCode:~1%| clip
- cls
- ECHO 您要&echo. 安装的版本 %instaver01%.%instaver02%.%instaver03%&echo.&echo. 等于 ^|^|&echo.&echo 现有 版本 %SysCmdMsgboxver01%.%SysCmdMsgboxver02%.%SysCmdMsgboxver03%&echo ----------------------------------------------------------------------
- echo 继续安装请输入[R]
- echo 退出安装请输入[Q]
- echo 删除安装请输入[%UninstallCode%]
- set /p RQU=
- if /i "%RQU%"=="R" (del %ComSpec:~0,-7%CmdMsgbox.exe&call:install&call:installcheck&exit)
- if /i "%RQU%"=="Q" (CmdMsgbox 2 "用户取消" "安装失败"&exit)
- if /i "%RQU%"=="%UninstallCode%" (call:uninstall&exit) else (cls&echo 输入有误,请重新输入&goto:uninstallselect)
- goto:eof
-
- :uninstall
- call:Sysverload
- del %ComSpec:~0,-7%CmdMsgbox.exe
- if not exist %ComSpec:~0,-7%CmdMsgbox.exe(
- .\CmdMsgbox "删除成功" "CmdMsgbox %SysCmdMsgboxver01%.%SysCmdMsgboxver02%.%SysCmdMsgboxver03%已从您的系统文件中移除" "删除成功" & exit
- ) else (
- CmdMsgbox "" "未预期错误:删除失败" "建议重启再试" "或重启后手动至%ComSpec:~0,-7%目录删除CmdMsgbox.exe" "删除失败" & exit
- )
- goto:eof
-
- :UAC_Check
- Rem 创建文件路径
- set TempFile_Name=%SystemRoot%\System32\BatTestUACin_SysRt%Random%.batemp
- Rem 写入文件
- ( echo "BAT Test UAC in Temp" >%TempFile_Name% ) 1>nul 2>nul
- Rem 判断写入是否成功
- if exist %TempFile_Name% (
- echo 正在以管理员身份运行
- ) else (
- echo 请以管理员身份重新启动,按任意键退出&pause>nul&exit
- )
- Rem 删除临时文件
- del %TempFile_Name% 1>nul 2>nul
-
- goto:eof
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |