MsgBox

优质
小牛编辑
129浏览
2023-12-01

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

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

参数

文本

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

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

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

选项

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

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

标题

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

超时

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

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

已知限制: 如果 MsgBox 仅含有一个 "确定" 按钮, 且当 MsgBox 自身的 线程 被其他线程中断时超时了, 那么 IfMsgBox 将认为用户按下了 "确定" 按钮.

Options 参数可以为一个或多个下列值的组合(和)。

功能十进制值十六进制值
确定 (即仅显示一个 "确定" 按钮)00x0
确定/取消10x1
终止/重试/忽略20x2
是/否/取消30x3
是/否40x4
重试/取消50x5
Cancel/Try Again/Continue60x6
添加一个 "帮助" 按钮 (请参阅后面的备注)163840x4000
   
错误图标 (停止/错误)160x10
问号图标320x20
惊叹号图标480x30
星号图标 (信息)640x40
   
让第二个按钮成为默认按钮2560x100
让第三个按钮成为默认按钮5120x200
   
系统模态 (总是在顶部)40960x1000
任务模态81920x2000
总是在顶部 (WS_EX_TOPMOST 样式)
(和系统模态类似, 但省略了标题栏图标)
2621440x40000
   
让文本右对齐显示5242880x80000
用于希伯来语/阿拉伯语的从右向左的阅读顺序10485760x100000

备注

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

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

要判断用户在最近的 MsgBox 中按下了哪个按钮, 请使用 IfMsgBox 命令. 例如:

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

参照 这个例子 可以自定义按钮的名称.

提示: 当 MsgBox 窗口活动时按下 Control-C 将复制其中的文本到剪贴板. 这适用于所有的 MsgBox, 而不仅是 AutoHotkey 生成的那些.

在 GUI 窗口中使用 MsgBox: 通过 Gui +OwnDialogs 的方法可以在 GUI 窗口中显示 模态 MsgBox. 模态 MsgBox 在其消失之前会阻止用户与原来的 GUI 窗口进行交互。此时, 不需要指定上表中的系统模态或任务模态选项.

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

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

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

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

相关

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 可以显示的单个字符串:
MsgBox % "New width for object " is: " . RestrictWidth(ObjectWidth%A_Index% * ScalingFactor)

; 下面的例子提醒用户 MsgBox 即将获取焦点(此时用户正在输入)。
SplashTextOn,,, A MsgBox is about to appear.
Sleep 3000
SplashTextOff
MsgBox The backup process has completed.