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.