PostMessage

将消息放入窗口或控件的消息队列中.

PostMessage MsgNumber , wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

参数

MsgNumber

类型: 整数

要发送的消息的编号. 请参阅消息列表来确定编号.

wParam, lParam

类型: 整数

如果省略其中一个, 则发送 0. 否则, 请指定消息的第一个和第二个组件.

每个参数必须是整数.

如果 AutoHotkey 或目标窗口是 32 位的, 则只使用参数的低 32 位; 也就是说, 如果超出了有符号值的范围 -2147483648 到 2147483647(-0x80000000 to 0x7FFFFFFF), 或者超出了无符号值的范围 0 到 4294967295(0xFFFFFFFF), 则值会被截断. 如果 AutoHotkey 和目标窗口都是 64 位的, 可以使用 AutoHotkey 所支持的任何整数值.

Control

类型: 字符串, 整数对象

如果省略, 则消息会被直接发送到目标窗口而不是它的某个控件. 否则, 指定为控件的 ClassNN, 文本或 HWND, 或者是一个具有 Hwnd 属性的对象. 有关详情, 请参阅控件参数.

如果这个参数指定了一个 HWND(作为一个整数或对象), 那么它不需要是一个控件(子窗口) 的 HWND. 也就是说, 它也可以是一个顶层窗口的 HWND.

WinTitle, WinText, ExcludeTitle, ExcludeText

类型: 字符串, 整数对象

如果这些都是空白或省略, 将使用上次找到的窗口. 否则, 为 WinTitle 指定窗口标题或其他条件, 来标识目标窗口, 和/或为 WinText 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示).

ExcludeTitleExcludeText 可用于根据标题或文本排除一个或多个窗口. 它们的规范类似于 WinTitleWinText, 除了 ExcludeTitle 不识别除窗口标题之外的任何条件.

窗口标题和文本是区分大小写的. 默认情况下, 不检测隐藏窗口, 而检测隐藏文本元素, 除非使用 DetectHiddenWindowsDetectHiddenText 进行更改. 默认情况下, 窗口标题的任意位置包含 WinTitleExcludeTitle 就能形成匹配, 除非使用 SetTitleMatchMode 进行了更改.

错误处理

如果找不到窗口或控件, 则抛出 TargetError.

如果消息不能被投递, 则抛出 OSError. 如果目标窗口运行在比脚本更高的完整性级别上(例如, 它以管理员身份运行, 而脚本不是), 消息可能被阻止.

备注

应该小心使用该函数, 因为发送消息到错误的窗口(或发送错误的消息) 可能导致意外的行为或者甚至让目标应用程序崩溃. 这是因为大多数应用程序并不是设计用于从外部来源中接受某些类型的消息.

PostMessage 将消息放入与目标窗口相关联的消息队列中, 它不会等待确认或回复. 相比之下, SendMessage 会等待目标窗口处理消息, 直到超时期结束.

SendMessage 不同, PostMessage 通常只发送数值, 而不是结构或字符串的指针.

要发送消息到系统中的所有窗口, 包括隐藏或禁用的那些, 请在 WinTitle 中指定 0xFFFF(0xFFFF 是 HWND_BROADCAST). 这种技术应该只用于目标为广播的消息.

要让脚本接收消息, 请使用 OnMessage.

请参阅消息指南来查看使用这些命令的介绍.

SendMessage, 消息列表, 消息指导, OnMessage, Automating Winamp, DllCall, ControlSend, MenuSelect

示例

切换活动窗口的键盘布局/语言为英语(US).

PostMessage 0x0050, 0, 0x4090409,, "A"  ; 0x0050 is WM_INPUTLANGCHANGEREQUEST.