为什么'msg * alarm'会在一段时间后消失?

时间:2016-11-07 00:40:06

标签: windows parameters native executable default-parameters

我有一个小的PowerShell脚本,可以让我快速为自己设置闹钟。它基本上只等待指定的分钟数,然后调用

  

msg *闹钟!

这很有效 - 会弹出一个消息框。唯一的问题是它会在一段时间后消失 - 所以如果我不在我的办公桌前,我会错过这个消息框。

根据文档found here,这是我没有指定时间值时的行为。

  

/ time:seconds:指定您发送的消息显示在用户屏幕上的时间。达到时间限制后,消息将消失。如果未设置时间限制,则消息将保留在用户屏幕上,直到用户看到该消息并单击“确定”。

然而情况并非如此,它确实消失了。现在,我必须为它保留一个任意高的数字。

    msg * /time:999999 alarm!

1 个答案:

答案 0 :(得分:2)

使用cdb跟踪通话时,会在启动msg.exe并向其传递999999的最大超时值时显示以下感兴趣的功能:

command: msg * /time:999999 alarm

f423f (999999) 的超时值通过ShowMessageBox注册表传递给rax

WINSTA!WinStationSendMessageW+0x353:
000007fe`fbf1ec93 e874deffff      
call    WINSTA!CSmartSession::ShowMessageBox (000007fe`fbf1cb0c)
rax=00000000000f423f rbx=0000000000000000 rcx=0000000000000010

在没有任何超时值的情况下启动msg.exe会将3c (60) 传递给ShowMessageBox函数。

command: msg * alarm

WINSTA!WinStationSendMessageW+0x353:
000007fe`fbf1ec93 e874deffff      
call    WINSTA!CSmartSession::ShowMessageBox (000007fe`fbf1cb0c)
rax=000000000000003c rbx=0000000000000000 rcx=0000000000000010

我的猜测是文档不是最新的(如果有的话)