下面列出来c++中的消息函数,分别进行介绍:
l BroadcastSystemMessage
此函数发送消息给指定的接收者,接收者可以是应用程序、可安装的驱动、网络驱动、系统级别的设备驱动或者任何系统部件的组合。
longBroadcastSystemMessage(
DWORD dwFlags, // broadcast option
LPDWORD lpdwRecipients, // recipients
UINT uiMessage, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
dwFlags:
指定广播的选项,这个参数可以是下面一个或者多个值。
值 | 解释 |
BFS_ALLOWSFW | Windows2000:当处理消息时,可以让接收者设置窗体的前景色。 |
BFS_FLUSHDISK | 在每个接受者处理消息后刷新磁盘、 |
BFS_FORCEIFHUNG | 继续广播消息,即使超时或者一个接收者被挂起 |
BSF_IGNORECURRENTTASK | 不发送消息到属于当前任务的窗口,这样可以阻止应用接收自己的消息。 |
BSF_NOHANG | 迫使一个挂起应用超时,如果其中的一个接收者超时,不再广播消息。 |
BSF_NOTIMEOUTIFNOHUNG | 等待消息的响应,只要接收者没挂起,就不会超时。 |
BSF_POSTMESSAGE | 发送一个消息,不要和BSF_QUERY一同使用。 |
BSF_QUERY | 一次发送消息给一位接收者,只有当现在的接收者返回TRUE时,才发送消息给下一位接收者。 |
BSF_SENDNOTIFYMESSAGE | Windows2000:用SendNotifyMessage函数发送消息,不和BSF_QUERY一同使用。 |
lpdwRecipients
指向包含和接收关于消息接收者信息的变量。这个参数可以是下面一个或者多个值。
值 | 解释 |
BSM_ALLCOMPONENTS | 广播给所以的系统组件 |
BSM_ALLDESKTOPS | Windows NT/2000:… |
BSM_APPLICATIONS | 广播给应用 |
BSM_INSTALLABLEDRIVERS | Windows 95/98:。。。 |
BSM_NETDRIVER | Windows 95/98:。。。 |
BSM_VXDS | Windows 95/98:。。。 |
当函数返回,这个变量接收一个以上复合值指示实际上接收消息接收者。
如果此参数为NULL,函数广播给所以的组件。
uiMessage
指定需要发送的消息。
wParam
消息指定的额外信息。
lParam
消息指定的额外信息。
返回值
如果函数返回成功,返回值是个负值。
如果函数不能广播消息,返回值为-1。
如果dwFlags参数是BSF_QUERY,至少一个接收者针对相应的消息返回BROADCAST_QUERY_DENY,返回值为0。可以通过调研GetLastError函数获得详细的信息。
说明
如果没有指定BSF_QUERY,函数发送指定的消息到所有请求的接收者,这些接收者返回的值将不会被处理。
l BroadcastSystemMessageEx
BroadcastSystemMessage函数的扩展,这个函数可以从接收者返回更多的信息。
long WINAPI BroadcastSystemMessageEx(
__in DWORD dwFlags,
__inout_opt LPDWORD lpdwRecipients,
__in UINT uiMessage,
__in WPARAM wParam,
__in LPARAM lParam,
__out_opt PBSMINFO pBSMInfo
);
pBSMInfo [out, optional]
指向BSMINFO结构体,如果请求被拒绝并且dwFlag设置为BSF_QUERY这个结构体会包括额外的信息。
l DispatchMessage
此函数发送消息给窗体程序,通常用GetMessage函数接收此函数发送的消息。
LRESULT DispatchMessage(
CONSTMSG *lpmsg // message information
);
lpmsg
指向包含消息的MSG结构体的指针。
返回值
返回值由窗体程序返回的值,尽管返回值的含义依赖于被调度的消息,但返回值通常被忽略。
说明
MSG结构体必须包含合法的消息值,如果lpMsg参数指向WM_TIMER消息并且WM_TIMER消息参数lParam不为NULL,则调用IParam指向的函数,而不是调用窗口程序。
l GetInputState
此函数决定在线程消息队列中,是否有鼠标点击或者键盘消息。
BOOL GetInputState(VOID);
返回值
如果队列中包含一个或者多个新的鼠标点击或者键盘消息,返回非0.
如果没有新的鼠标点击或者键盘消息,返回0。