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

时间:2013-07-07 21:32:33

标签: autohotkey

我需要在我的脚本中显示msgbox之类的内容,但无需等待点击即可。

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

类似的东西:

...
msgbox, MyInformationString; display information
sleep, 30000 ; wait 30 seconds
; close msgbox but HOW ???
...

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

2 个答案:

答案 0 :(得分:7)

查看docs中的msgbox。由于您通过AutoHotkey生成msgbox,因此可以设置自动关闭消息的时间限制。这意味着你不需要推动任何东西 - 框出现然后就会消失。

MsgBox [, Options, Title, Text, Timeout]

Timeout是最后一个参数:

  

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

     

如果此值超过2147483(24.8天),则将其设置为2147483。   超时过后,消息框将自动出现   关闭,IfMsgBox命令将看到值TIMEOUT。

     

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

答案 1 :(得分:6)

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

enter image description here

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

  1. 窗口标题
  2. 消息
  3. 秒数
  4. 标签消失后要调用的名称。
  5. 以下是您的代码从普通MsgBox更改为此代码的方式。

    MsgBox, Title, Msg
    OtherCode
    return
    

    MsgBoxTimed("Title", "Msg", 10, "Foo")
    return
    Foo:
    OtherCode
    return
    

    此功能需要位于同一个文件中,或#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
    }