6

我需要msgbox在我的脚本中显示类似的东西,但不需要等待点击确定。

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

就像是:

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

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

4

2 回答 2

10

msgbox文档中查看。由于您是msgbox通过 AutoHotkey 生成的,因此您可以对其设置时间限制以自动关闭消息。这意味着您不必推动任何东西 - 盒子出现然后消失。

MsgBox [, Options, Title, Text, Timeout]

Timeout是最后一个参数:

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

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

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

于 2013-07-07T23:10:37.397 回答
9

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

在此处输入图像描述

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

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

这是您的代码从普通 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
} 
于 2013-07-08T21:52:06.170 回答