如何在没有单击的情况下使AutoHotkey消息框消失?

Mel*_*lan 5 autohotkey

我需要像我的脚本中显示的msgbox一样,但不需要等待点击好.

我需要的是在一段时间内显示一个字符串,然后让它消失.如果它可以显示实时计时器字符串但不是必需的,将会很有帮助.

就像是:

...
msgbox, MyInformationString; display information
sleep, 30000 ; wait 30 seconds
; close msgbox but HOW ???
...
Run Code Online (Sandbox Code Playgroud)

它不必是msgbox命令.但我无法弄清楚如何创建一个新的弹出窗口或任何其他方式来显示信息.格式是我最关心的问题.

bgm*_*der 8

msgbox文档中查看.由于您正在生成msgbox通过AutoHotkey,您可以设置它的自动关闭消息的时间限制.这意味着你不必推动任何东西 - 盒子出现然后就会消失.

MsgBox [, Options, Title, Text, Timeout]
Run Code Online (Sandbox Code Playgroud)

Timeout 是最后一个参数:

(可选)以秒为单位的超时,可以包含小数点,但默认情况下不是表达式.在v1.1.06 +中,这可以是强制表达式,例如%mins*60.

如果此值超过2147483(24.8天),则将设置为2147483.超时结束后,消息框将自动关闭,IfMsgBox命令将显示值TIMEOUT.

已知限制:如果MsgBox只包含一个OK按钮,IfMsgBox会认为如果MsgBox超时而其自己的线程被另一个中断,则按下OK按钮.


Bri*_*and 7

如果您真的想要自己倒计时,可以创建一个充当MsgBox的GUI.

在此输入图像描述

在这个例子中,我们有4个参数.

  1. 窗口的标题
  2. 消息
  3. 秒数
  4. 消失时要调用的标签名称.

这是您的代码从正常的MsgBox更改为此代码的方式.

MsgBox, Title, Msg
OtherCode
return
Run Code Online (Sandbox Code Playgroud)

MsgBoxTimed("Title", "Msg", 10, "Foo")
return
Foo:
OtherCode
return
Run Code Online (Sandbox Code Playgroud)

此功能需要在同一个文件中,或者#Included

MsgBoxTimed(title, msg, seconds, complete="") {
    static init = false, _seconds, _complete
    global Msg92, Seconds92
    if (!init)
    {
        init := true
        Gui, 92:Font, s24
        Gui, 92:Add, Text, vMsg92 Center w360, %msg%
        Gui, 92:Font, s30 cRed
        Gui, 92:Add, Text, vSeconds92 Center w360, %seconds%
    }

    _seconds := seconds
    _complete := complete

    GuiControl, 92:, Msg92, %msg%
    Gui, 92:Show, w400 h150, %title%

    Update92:
    GuiControl, 92:, Seconds92, %_seconds%
    _seconds -= 1
    if (_seconds > 0) {
        SetTimer, Update92, -1000
    }
    else {
        Gui, 92:Hide
        if (_complete)
            SetTimer, %_complete%, -1
    }
    return
} 
Run Code Online (Sandbox Code Playgroud)