Windows [cmd.exe] 命令显示超时消息框?

Posted

技术标签:

【中文标题】Windows [cmd.exe] 命令显示超时消息框?【英文标题】:Windows [cmd.exe] command to display a messagebox with timeout? 【发布时间】:2014-02-05 13:59:49 【问题描述】:

注意:这是一个 question-with-answer,目的是记录其他人可能认为有用的技术,并可能了解其他人的更好解决方案。请随意添加批评或问题作为 cmets。也请随意添加其他答案。 :)


如何通过键入单个 Windows 命令来显示 消息框,例如在“开始”菜单的运行对话框中,还是在 [cmd.exe] 命令解释器中?

【问题讨论】:

【参考方案1】:

一种方法是使用明显未记录的功能,即 [mshta.exe],Windows .hta html 应用程序的运行时引擎,接受通用 URL 作为命令行参数,包括 javascript: 协议 URL:

mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"

            

此命令可以在例如[cmd.exe]],或例如在“开始”菜单的 Run 对话框中,也许可以结合 schtasks 命令来创建一个茶壶……

上面的消息框在 10 秒后超时,但指定 0 秒超时意味着“不要超时”,产生更普通的持久消息框。

对于更简单的消息框,您可以改用 MSHTA 主机提供的 alert 函数。

【讨论】:

那么mshta "javascript:alert('Message!');" 也应该可以工作 根据Popup Method documentation,它可以显示更多的按钮(如RetryCancel)并且可以返回按钮的值被按下。这个值如何返回到批处理脚本? @Wayfarer;自然的方法是通过mshta 进程退出代码,但我不知道有什么合理的方法(不合理的方法:杀死进程)。替代方法包括将值存储在注册表项或文件中。它很丑,然后就不再是单线了。相反,如果我需要那个功能,我想我会用 C++ 编写一个实用程序。这几乎是微不足道的。 贫民区提醒:16:30 mshta javascript:alert("Pick up kids from school!");close(); @Wayfarer,可能来不及提供帮助,但有一种方法可以在此处获取退出代码(错误级别):***.com/questions/20818111/…【参考方案2】:

在命令提示符下:

msg %username% Message

有趣的参数是:

/w        (wait for user) 
/time:<seconds>

【讨论】:

这是一个不错的选择,但在我的 Windows 7 中不起作用。我怀疑 msgnet send 在 Windows 7 或更早版本中已停用,可能在 Windows Vista 中。 :( 在 Win7 企业版中工作。也许微软认为,“家庭”用户不需要它。 哦! Explorer 说这是 Windows 7 Home Premium,Service Pack 1。 适用于 Windows 7 Ultimate 和 Windows 7 Professional SP1。【参考方案3】:

发现如果将 msg.exe 从 Win7 Pro 机器复制到 Win7 Home 机器,它可以工作。将 msg.exe 复制到 C:\Windows\System32 文件夹或从 C:\Windows\System32 文件夹复制。

【讨论】:

另一种方法是,当可以选择创建文件时,只创建 VBScript 或 JScript 脚本文件。例如。在文件msgbox.vbs 中放置此代码:msgbox WScript.Arguments(0), vbInformation, "Message!"。这样就不需要安装Win7 Pro了。【参考方案4】:

如果您创建一个带有您想要显示的消息的小型 VBScript 会怎样? IE。创建 e 文件,命名为“Message.vbs”,内容为:

MsgBox "Some info here", 0, "Message Title"

然后这样称呼它:

cscript.exe PATH\Message.vbs

【讨论】:

是的。为了更通用,可以将第一个参数更改为WScript.Arguments(0),正如我注意到的in a comment on another answer。对于第二个参数,可以使用vbInformation 或其等效数字。添加与 C 和 C++ MB_SETFOREGROUND 等效的选项可能也是一个好主意,以免该框出现在控制台窗口后面;我不知道 VBS 的名称,抱歉。

以上是关于Windows [cmd.exe] 命令显示超时消息框?的主要内容,如果未能解决你的问题,请参考以下文章

怎样使win7命令提示符(cmd.exe)全屏显示?

windows下cmd命令行显示UTF8字符设置(CHCP命令)

Windows的idea的Terminal替换为git bash(默认是Windows的cmd.exe命令行)

Windows的idea的Terminal替换为git bash(默认是Windows的cmd.exe命令行)

Windows改动cmd字符集

windows下cmd命令行显示UTF8字符设置(CHCP命令)