Board logo

标题: [其他] 使用mshta弹窗如何获取弹窗的返回值为确定还是取消? [打印本页]

作者: mpili    时间: 2020-6-19 15:10     标题: 使用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直接给我关闭了。。也取不到返回值?
作者: mpili    时间: 2020-6-19 15:28

解决了,还是通过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:"=""%)。。这个貌似是。。。没看懂,只能大概明白,我去看看置顶的那个参考下
作者: 不知道是谁    时间: 2020-6-19 18:39

  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
复制代码
参考资料:
作者: chishingchan    时间: 2024-11-12 12:17

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



    怎么第 4 行不支持中文字符?!
作者: 77七    时间: 2024-11-12 13:55

本帖最后由 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. )
复制代码

作者: aloha20200628    时间: 2024-11-12 15:38

本帖最后由 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
复制代码

作者: chishingchan    时间: 2024-11-12 21:09

本帖最后由 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
复制代码

作者: chishingchan    时间: 2024-11-12 21:32

回复  chishingchan

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



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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2