# MsgBox

在含有一个或多个按钮(例如 "是" 和 "否") 的小窗口中显示指定的文本 .

    MsgBox, Text
    MsgBox , Options, Title, Text, Timeout

## 参数

Text(文本)

  如果省略所有的参数, 消息框会显示 "Press OK to continue." 文本. 否则, 此参数表示消息框中显示的文本, 用来引导用户如何操作或提示信息.

  可以使用转义序列来显示特殊字符. 例如, `n 表示换行符, 它结束当前行并开始一个新行. 因此使用 text1`n`ntext2 会在 text1 和 text2 之间添加一个空行.

  如果 Text 较长, 可以通过延续片段的方法将其分解成较短的几行, 这样可以增加可读性和可维护性.

Options(选项)

  表示消息框的类型和可能的按钮组合. 如果为空或省略, 则默认为 0. 请参阅下列表格来了解允许的值.

  此参数必须为原义的数字或在 [v1.1.06+] 强制表达式, 例如 `% Options`. 任何其他非空值都不会被看做是此参数, 相反的只是被认为是单参数模式中 Text 的一部分.

Title(标题)

  消息框窗口的标题. 如果省略或为空, 那么它默认为脚本的名称(不含路径).

Timeout(超时)

  (可选) 以秒为单位的超时时间, 默认情况下可以为小数但不能是表达式. [v1.1.06+]: 此参数可以强制为表达式, 例如 `% mins*60`.

  如果这个值超过 2147483(24.8 天), 那么它会被设置为 2147483. 经过这个超时时间后消息框将自动关闭且 IfMsgBox 命令将看到表示超时状态的值 TIMEOUT.

  [v1.1.30.01] 修复以下限制: 如果消息框仅含有一个 "确定" 按钮, 且当消息框自身的线程由于被另一个线程中断而处于非活动状态, 那么 IfMsgBox 将认为消息框超时且用户按下了 "确定" 按钮.

## Options 参数的值

选项 参数可以是以下组的值的组合(和).

### 组 #1: 按钮

若要指定在消息框中显示的按钮, 请添加以下值 之一:

功能 | 十进制值 | 十六进制值
--- | --- | ---
确定(即仅显示一个 "确定" 按钮) | 0 | 0x0
确定/取消 | 1 | 0x1
终止/重试/忽略 | 2 | 0x2
是/否/取消 | 3 | 0x3
是/否 | 4 | 0x4
重试/取消 | 5 | 0x5
取消/重试/继续 | 6 | 0x6

### 组 #2: 图标

要在消息框中显示一个图标, 请添加以下值 之一:

功能 | 十进制值 | 十六进制值
--- | --- | ---
错误图标(停止/错误) | 16 | 0x10
问号图标 | 32 | 0x20
惊叹号图标 | 48 | 0x30
星号图标(信息) | 64 | 0x40

### 组 #3: 默认按钮

若要指定默认按钮, 请添加以下值 之一:

功能 | 十进制值 | 十六进制值
--- | --- | ---
让第二个按钮成为默认按钮 | 256 | 0x100
让第三个按钮成为默认按钮 | 512 | 0x200
使第四个按钮为默认的 (需要帮助按钮) | 768 | 0x300

### 组 #4: 模式

若要指定对话框的模式, 请添加以下值 之一:

功能 | 十进制值 | 十六进制值
--- | --- | ---
系统模式(总是在顶部) | 4096 | 0x1000
任务模式 | 8192 | 0x2000
置顶(WS_EX_TOPMOST 样式) (和系统模式类似, 但省略了标题栏图标) | 262144 | 0x40000

### 组 #5: 其他选项

若要指定其他选项, 请添加以下值中的 一个或多个:

功能 | 十进制值 | 十六进制值
--- | --- | ---
添加一个帮助按钮(请参阅后面的备注) | 16384 | 0x4000
让文本右对齐显示 | 524288 | 0x80000
用于希伯来语/阿拉伯语的从右向左的阅读顺序 | 1048576 | 0x100000

## 备注

消息框通常看起来像这样:

使用上面的表格时, 可以把您期望用于消息框的选项值加在一起. 例如, 要显示一个默认按钮为 "否" 的 "是"/"否" 消息框, 那么需要把 Options 的值设置为 256+4(260). 使用十六进制表示为 0x100+0x4(0x104).

MsgBox 对逗号的处理比较智能, 所以通常不需要对 Text 参数中的逗号进行转义.

要判断用户在最近的消息框中按下了哪个按钮, 请使用 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 窗口当作 MsgBox: 通过 Gui +OwnDialogs 的方法一个 GUI 窗口可以显示为 模式 对话框(MsgBox). 模式 对话框在其消失之前会阻止用户与原来的 GUI 窗口进行交互. 此时, 不需要指定上表中的系统模式或任务模式选项.

当 Gui +OwnDialogs 无效 时, 在用户响应 MsgBox 前可以使用任务模式选项(8192) 来禁用所有的脚本窗口.

"帮助" 按钮: 在 Options 中使用了 "帮助" 按钮选项(16384) 时, 只有符合下面两个条件, 那么按下 "帮助" 按钮才会有效果:

1. 消息框是由 GUI 窗口通过 Gui +OwnDialogs 的方法显示的.
2. 脚本正在监听 WM_HELP 消息(0x0053). 例如: `OnMessage(0x0053, "WM_HELP")`. 调用 WM_HELP() 函数时, 它可以通过如显示另一个窗口或消息框的方法引导用户.

关闭按钮(在消息框的标题栏): 由于消息框窗口是操作系统内置的特性, 所以它的 X 按钮仅在某些按钮存在时才会启用. 如果只有一个 "确定" 按钮, 那么点击 X 按钮等同于按下 "确定" 按钮. 其他情况下, 只有含有 "取消" 按钮时才会启用 X 按钮, 此时点击 X 等同于按下 "取消" 按钮.

## 相关

IfMsgBox, InputBox, FileSelectFile, FileSelectFolder, ToolTip, GUI

## 示例

1 个参数的方法. 一种简单快捷的信息显示方式. 用户可以按确定按钮关闭消息框, 继续执行.

    MsgBox This is the 1-parameter method. Commas (,) do not need to be escaped.

3 个参数的方法. 使用第 1 个和第 2 个参数来指定选项和标题.

    MsgBox, 4, , This is the 3-parameter method. Commas (,) do not need to be escaped.

使用 IfMsgBox 来确定用户在最近的消息框中按下了哪个按钮.

    MsgBox, 4, , Do you want to continue? (Press YES or NO)
    IfMsgBox No
        return

4 个参数的方法. 使用第 4 个参数(Timeout) 在一定秒数后自动关闭消息框.

    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 可以显示的单个字符串.

    MsgBox % "New width for object #" . A_Index . " is: " . RestrictWidth(ObjectWidth%A_Index% * ScalingFactor)

提醒用户消息框即将获取焦点(如果用户正在输入).

    SplashTextOn,,, A message box is about to appear.
    Sleep 3000
    SplashTextOff
    MsgBox The backup process has completed.

dftg