[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 使用mshta弹窗如何获取弹窗的返回值为确定还是取消?

  1. mshta vbscript:msgbox("提示内容1",1,"提示窗口1")(window.close)
复制代码
如题,如何获取弹窗的返回值是确定还是取消,以进行下一步操作??直接使用set貌似接收不到
  1. @echo off
  2. for /f %%i in ('mshta vbscript:msgbox("提示内容1",1,"提示窗口1")(window.close)') do (
  3.     set "bbb=%%i"
  4. )
  5. echo %bbb%
  6. pause
复制代码
使用for直接给我关闭了。。也取不到返回值?

解决了,还是通过for解决的,不过是参考了别人的代码
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. ::CODER BY 老刘 POWERD BY iBAT
  4. Set Vbscript=Msgbox("Hello,world!",1)
  5. for /f "Delims=" %%a in (
  6. 'mshta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(%Vbscript:"=""%)"^)(Close^)'
  7. ) do Set "MsHtaReturnValue=%%a"
  8. echo %MsHtaReturnValue%
  9. Set ReturnValue1=确定
  10. Set ReturnValue2=取消或关闭窗口
  11. Echo 你点击了!ReturnValue%MsHtaReturnValue%!。
  12. pause
复制代码
转载自http://www.mamicode.com/info-detail-2175913.html
不过其中的一些代码不太了解。。比如.Write(%Vbscript:"=""%)。。这个貌似是。。。没看懂,只能大概明白,我去看看置顶的那个参考下

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set ms=mshta vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(1).Write(msgbox("是否立即关闭?",4132,"提示"))(window.close)
  4. for /f %%i in ('!ms!') do if %%i EQU 6 exit
  5. pause
复制代码
参考资料:

TOP

解决了,还是通过for解决的,不过是参考了别人的代码转载自http://www.mamicode.com/info-detail-2175913.h ...
mpili 发表于 2020-6-19 15:28



    怎么第 4 行不支持中文字符?!

TOP

本帖最后由 77七 于 2024-11-12 13:58 编辑

回复 4# chishingchan


   把批处理保存为ansi编码

我自己常用cax
  1. cax /msy "提示"
  2. if errorlevel 7 (
  3. echo 否
  4. ) else if errorlevel 6 (
  5. echo 是
  6. )
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 aloha20200628 于 2024-11-12 15:53 编辑

回复 4# chishingchan

一。若以下代码用简中编码保存,并在936码页(即简中编码,可在运行前用 chcp 936>nul 命令强制)环境中运行,即可正常显示弹窗中文
二。若以下代码用utf-8编码(无头标)保存,并在65001码页(即utf-8编码,可在运行前用 chcp 65001>nul 命令强制)环境中运行,即可正常显示弹窗中文
  1. @echo off &setlocal &for /f %%v in (
  2.     'mshta vbscript:execute("createobject(""scripting.filesystemobject"").getstandardstream(1).write(msgbox(""中文提示"",1)):close"^)'
  3. ) do set "v=%%v"&echo,弹窗返回值=%%v
  4. endlocal&pause&exit/b
复制代码
1

评分人数

TOP

本帖最后由 chishingchan 于 2024-11-12 21:34 编辑

我整理了一下:
  1. rem 隐藏运行
  2. if not "%1"=="hide" mshta VBScript:CreateObject("WScript.Shell").Run("""%~f0"" hide",0)(Close)&exit
  3. rem 显示对话框
  4. for /f "delims=" %%i in (
  5. 'mshta VBScript:Execute("CreateObject(""Scripting.FilesystemObject"").GetStandardStream(1).Write(MsgBox(""此程序即将删除系统盘的用户数据!是否继续?"",4132,""警告"")):Close"^)'
  6. ) do set ReturnValue=%%i
  7. if "%ReturnValue%"=="6" set Button=是
  8. if "%ReturnValue%"=="7" set Button=否
  9. mshta VBScript:MsgBox("%Button%",0,"返回值")(Close)
  10. rem 播放语音
  11. if "%ReturnValue%"=="7" mshta VBScript:CreateObject("sapi.spvoice").speak("Goodbye")(Close)&exit
复制代码

TOP

回复  chishingchan

一。若以下代码用简中编码保存,并在936码页(即简中编码,可在运行前用 chcp 936> ...
aloha20200628 发表于 2024-11-12 15:38



    可惜!msgbox 没有倒计时功能!

TOP

返回列表