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

14
注意:这是一个question-with-answer,旨在记录一种可能对他人有用的技术,并可能了解其他更好的解决方案。请随时在评论中添加批评或问题。还可以自由添加其他答案。 :)

如何通过输入单个Windows命令(例如从“开始”菜单中的“运行”对话框或[cmd.exe]命令解释器中)来显示消息框?

4个回答

28

一种方法是使用看似未记录的功能,即[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]中或者从开始菜单中的运行对话框中发出此命令,也可以与schtasks命令结合使用以创建一个定时器…

上述消息框在10秒后超时,但指定0秒超时意味着“不超时”,生成一个更普通的持久性消息框。

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


2
好的,mshta "javascript:alert('Message!');" 这个也应该可以工作。 - Pierre
1
根据弹出窗口方法文档所述,它可以显示更多按钮(如“重试”和“取消”),并且可以返回已按下的按钮的值。如何将此值返回给批处理脚本? - Wayfarer
1
@Wayfarer; 自然的方法是通过mshta进程退出代码,但我不知道任何合理的方法来做到这一点(不合理的方法:杀死进程)。那么替代方案包括将值存储在注册表键或文件中。这很丑陋,也不再是一个单行程序了。相反,如果我需要这个功能,我认为我会用C++编写一个实用程序。那几乎是微不足道的。 - Cheers and hth. - Alf
贴心提醒:在下午4:30,执行mshta javascript:alert("Pick up kids from school!");close(); - Konrads
1
@Wayfarer,也许已经太晚了,但是在这里有一种方法可以获取退出代码(errorlevel):https://dev59.com/YXrZa4cB1Zd3GeqP57VE - Sam Hasler
@Pierre,它可以工作,除了用户按下“确定”后,会打开另一个窗口。这是修复方法:javascript:alert('Message!');close(); - FractalSpace

9
在命令提示符下:
msg %username% Message

有趣的参数包括:

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

这个不错,但在我的Windows 7上无法工作。我怀疑msgnet send在Windows 7或更早的版本中已经停用,可能是在Windows Vista中。:( - Cheers and hth. - Alf
在Win7企业版中工作。也许微软认为,“家庭”用户不需要它。 - Stephan
哦!资源管理器显示这是Windows 7家庭普及版,服务包1。 - Cheers and hth. - Alf
在我的Windows 7 Ultimate和Windows 7 Professional SP1上运行良好。 - Lightness Races in Orbit

1
如果您想显示一条消息,可以创建一个包含所需信息的小型VBScript文件。例如,创建一个名为“Message.vbs”的文件,其内容如下: MsgBox "这里是一些信息", 0, "消息标题" 然后通过以下方式调用它: cscript.exe 路径\Message.vbs

是的。为了更加通用,我们可以将第一个参数更改为 WScript.Arguments(0),正如我在另一个回答的评论中所指出的那样(https://dev59.com/U2Ei5IYBdhLWcg3wjs5j#NmERoYgBc1ULPQZFTRxo)。对于第二个参数,可以使用 vbInformation 或其数字等价物。最好还要添加 C 和 C++ 的选项等价物 MB_SETFOREGROUND,以防消息框出现在控制台窗口后面;我不知道 VBS 的名称,抱歉。 - Cheers and hth. - Alf

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

当有创建文件的选项时,另一种选择是只创建VBScript或JScript脚本文件。例如,在文件msgbox.vbs中放置此代码:msgbox WScript.Arguments(0), vbInformation, "Message!"。这样就不需要Win7 Pro安装。 - Cheers and hth. - Alf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接