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

Dis*_*ive 0 windows parameters executable native default-parameters

我有一个小的 powershell 脚本,它允许我快速为自己设置警报。它基本上只是等待指定的分钟数然后调用

味精 * 警报!

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

根据此处找到的文档,这是我未指定时间值时的行为。

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

然而事实并非如此,它确实消失了。现在,我必须指定一个任意高的数字才能保留。

    msg * /time:999999 alarm!
Run Code Online (Sandbox Code Playgroud)

Lie*_*ers 5

cdb在启动msg.exe和传递最大超时值时,跟踪调用会显示以下感兴趣的函数999999

command: msg * /time:999999 alarm

的超时值通过寄存器f423f (999999)传递。ShowMessageBoxrax

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

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
Run Code Online (Sandbox Code Playgroud)

我的猜测是文档不是最新的(如果曾经是)