找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28430|回复: 7

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

[复制链接]
发表于 2020-6-19 15:10:52 | 显示全部楼层 |阅读模式
  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直接给我关闭了。。也取不到返回值?
 楼主| 发表于 2020-6-19 15:28:47 | 显示全部楼层
解决了,还是通过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:50 | 显示全部楼层
  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
复制代码
参考资料:
发表于 2024-11-12 12:17:34 | 显示全部楼层
解决了,还是通过for解决的,不过是参考了别人的代码转载自http://www.mamicode.com/info-detail-2175913.h ...
mpili 发表于 2020-6-19 15:28



    怎么第 4 行不支持中文字符?!
发表于 2024-11-12 13:55:09 | 显示全部楼层
本帖最后由 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. )
复制代码
发表于 2024-11-12 15:38:43 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
chishingchan + 1 受教了

查看全部评分

发表于 2024-11-12 21:09:04 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2024-11-12 21:32:52 | 显示全部楼层
回复  chishingchan

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



    可惜!msgbox 没有倒计时功能!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:49 , Processed in 0.019236 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表