鱼C论坛

 找回密码
 立即注册
查看: 5713|回复: 0

[API档案] SendMessage

[复制链接]
发表于 2016-2-17 23:46:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
函数功能:

SendMessage 函数发送指定消息给一个或多个窗口。

SendMessage 函数直接调用指定窗口的窗口过程,直到该窗口过程执行完毕,该函数才返回。

如果希望发完消息立刻返回,请使用 SendMessageCallbackSendNotifyMessage 函数;如果希望将消息投递都线程的消息队列并立即返回,请使用 PostMessagePostThreadMessage 函数。


API 函数原型:
LRESULT WINAPI SendMessage(
  _In_ HWND   hWnd,
  _In_ UINT   Msg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

参数解析:

参数 含义
hWnd 1. 指定接收消息的窗口句柄
2. 如果该参数的值是 HWND_BROADCAST((HWND)0xffff),那么消息将发送给所有的顶层窗口(包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息就是不发送给子窗口)
3. 消息发送需服从 UIPI(User Interface Privilege Isolation,用户界面特权隔离)技术,消息只能发送到较小或同等级别的进程中的线程的消息队列
Msg 1. 指定将被发送的消息
2. 请参考:Windows 常用消息及含义
wParam 消息的附加信息
lParam 消息的附加信息


返回值:

返回值是指定消息的处理结果,这取决于所发送的消息。


备注:

1. 当消息被 UIPI 所阻断,调用 GetLastError 函数可以获得错误代码是 5(拒绝访问)。

2. 对于需要使用 HWND_BROADCAST 通信的应用程序,应当调用 RegisterWindowMessage 函数来为应用程序间的通信取得一个唯一的消息。

3. 系统只对系统级的消息(0 ~ WM_USER-1)进行封送处理。发送自定义消息(>= WM_USER)到另一个进程,你需要自己对消息进行封送处理。

4. 如果 SendMessage 函数的调用者跟指定窗口处于同一线程,则窗口过程就如同子程序一样被立即调用;如果不处于同一线程,则系统将切换到目标窗口所在的线程,并调用相关的窗口过程。

5. 在线程之间发送的消息,只有当接收线程在执行消息获取代码的时候才会被处理。此时调用 SendMessage 所在的线程会被阻塞,直到接收线程处理完该消息为止。然而,此时发送消息的线程仍然可以处理非队列消息。为了避免这种现象发生,最好使用 SendMessageTimeout 函数,并设置 fuFlags 参数为 SMTO_BLOCK。

【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 23:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表