# MsgBox

在一个窗口中显示指定的文本，并包含一个或多个按钮（比如 Yes/是 和 No/否）。

MsgBox, Text
MsgBox [, Options, Title, Text, Timeout]

#### 参数

Text | 如果省略所有的参数，MsgBox 会显示“Press OK to continue.”否则，将显示该参数所指定的文本，一般用来显示提示信息或当前状态信息。 Escape sequences/转义序列 可以用来显示特殊字符。比如，`n 代表一个换行符，它会另起一行。因此，使用 文本1`n`n文本2 可以在 文本1 和 文本2 之间插入一个空行。 如果 Text/文本 太长，可以使用 continuation section/字符串分段 的方法将它分为几个短小的段落，这样可以增加代码的可读性和可维护性。
Options | 指定消息框的类型和它所包含的按钮。如果留空或省略，默认为 0 。其它允许的值可以查看下方的表格。 这个参数不能使用表达式或者类似 %option% 这样的变量引用，请直接使用数字。
Title | 消息框的标题。如果留空或省略，默认为脚本名（不带路径）。
Timeout | （可选）超时时间，单位是秒（可以包含小数点但是不能是表达式）。如果它的值超过 2147483（24.8天），它将会被设置为 2147483 。超过超时时间以后消息框会自动关闭，并且可以使用 IfMsgBox 命令的参数 TIMEOUT 来捕获超时状态。 已知局限：如果 MsgBox 只包含一个 OK/确定按钮 ，则当它超时后，并且本身的 thread/线程 被其它脚本中断的时候，IfMsgBox 会认为它是按下了 OK/确定按钮 。

Options 参数可以是以下一个或多个值的和。

Function | 十进制值 | 十六进制值
OK/确定（也就是只显示 OK/确定按钮 ） | 0 | 0x0
OK/确定 | Cancel/取消 | 1 | 0x1
Abort/终止 | Retry/重试 | Ignore/忽略 | 2 | 0x2
Yes/是 | No/否 | Cancel/取消 | 3 | 0x3
Yes/是 | No/否 | 4 | 0x4
Retry/重试 | Cancel/取消 | 5 | 0x5
Cancel/取消 | Try Again/重试 | Continue/继续 (2000/XP以上) | 6 | 0x6
添加一个帮助按钮 (看下方的注解） | 16384 | 0x4000
错误图标（停止/错误） | 16 | 0x10
询问图标 | 32 | 0x20
感叹图标 | 48 | 0x30
信息图标 | 64 | 0x40
使第二个按钮为默认按钮 | 256 | 0x100
使第三个按钮为默认按钮 | 512 | 0x200
系统模式对话框（总在最前） | 4096 | 0x1000
任务模式对话框 | 8192 | 0x2000
在默认的桌面上显示消息框 （Windows NT/2000/XP 或之后的系统） | 131072 | 0x20000
总在最前（WS_EX_TOPMOST风格） （和系统模式消息框相似但是省略了标题栏图标） | 262144 | 0x40000
文字右对齐 | 524288 | 0x80000
从右往左的阅读顺序 | 1048576 | 0x100000

#### 注意

上方表格中的值在使用的时候可以进行相加。比如，要显示一个默认按钮为否的 是/否 对话框 ，则 Options 的值就是 256+4 (260) 。用十六进制表示就是 0x100+0x4 (0x104) 。

MsgBox 对逗号的处理比较智能，所以一般在 Text 参数中不需要对逗号进行 escape/转义 。

要判断用户在最近一次消息框中按下了哪个按钮，可以使用 IfMsgBox 命令，例如：

    MsgBox, 4,, Would you like to continue? (press Yes or No)
    IfMsgBox Yes
        MsgBox You pressed Yes.
    else
        MsgBox You pressed No.

按钮的名字是可以自定义的，参看 这个例子 。

提示: 使用 Ctrl+C 可以复制当前激活的消息框中的文字。不仅是 AutoHotkey 提供的消息框，这个操作对所有的消息框都适用。

在 GUI/图形界面 中使用消息框: 在 GUI/图形界面 窗口中，可以使用 Gui +OwnDialogs 来显示一个 模式 消息框。模式 消息框可以避免用户在消息框消失之前对原来的 GUI/图形界面 窗口进行修改。注意：在这种情况下，在 Options 参数中可以不必指定 系统模式消息框 或者 任务模式消息框 。

当 Gui +OwnDialogs 无效 的时候，任务模式消息框（8192）可以屏蔽所有的脚本窗口，直到用户关闭了消息框。

帮助按钮: 在 Options 参数中使用了帮助按钮（83）的时候，点击帮助按钮不会有任何效果，除非满足以下两个条件：

1. 消息框是 GUI/图形界面 窗口使用 Gui +OwnDialogs 显示的。
2. 脚本监听了 WM_HELP 消息（0x53）。例如：OnMessage(0x53, "WM_HELP")。当 WM_HELP() 函数被调用的时候，可以显示另外一个窗口或者消息框来对用户进行帮助引导。

关闭按钮（在消息框的标题栏上）：因为消息框是操作系统内置功能，所以它的 X/关闭 按钮只有在能够使用的时候才会是启用状态。如果消息框只包含一个 OK/确定 按钮，点击 X/关闭 按钮等同于点击 OK/确定 按钮。否则，X/关闭 按钮处于停用状态，除非消息框包含了 Cancel/取消 按钮，这时点击 X/关闭 按钮就等同于点击 Cancel/取消 按钮。

#### 相关命令

IfMsgBox, InputBox, FileSelectFile, FileSelectFolder, ToolTip, GUI

#### 示例

    MsgBox This is the 1-parameter method. Commas (,) do not need to be escaped.
    MsgBox, 4, , This is the 3-parameter method. Commas (,) do not need to be escaped.
    MsgBox, 4, , Do you want to continue? (Press YES or NO)
    IfMsgBox No
        return
    MsgBox, 4, , 4-parameter method: this MsgBox will time out in 5 seconds.  Continue?, 5
    IfMsgBox Timeout
        MsgBox You didn't press YES or NO within the 5-second period.
    else IfMsgBox No
        return

    ; 在参数的前面加上“%”，它后面就成了一个表达式
    ; 在下面的例子中，进行了数学计算，读取了内置变量，调用了函数
    ; 它们之间使用“.”联接成一条单独的字符串进行显示。
    MsgBox % "New width for object #" . A_Index . " is: " . RestrictWidth(ObjectWidth%A_Index% * ScalingFactor)

    ; 下面的例子提醒用户一个消息框将要获取焦点（用户正在打字的时候）。
    SplashTextOn,,, A MsgBox is about to appear.
    Sleep 3000
    SplashTextOff
    MsgBox The backup process has completed.