VB.NET SendMessage (PostMessage)消息大全及使用说明
Windows 是一个消息驱动式系统,SendMessage(PostMessage)是应用程序和应用程序之间进行消息传递的主要手段之一,这里我搜集整理了
SendMessage(PostMessage)函数的详细参数介绍,以备自用。
(1)函数声明:
Private Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Integer, ByVal wMsg As Integer,ByVal
wParam As Integer,ByVal IParam As Object) As Integer
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal
wParam As Integer, lParam As Object) As Integer
参数 1:hwnd-窗口句柄。窗口可以是任何类型的屏幕对象;
参数 2:wMsg-用于区别其他消息的常量值;
参数 3:wParam-通常是一个与消息有关的常量值,也可能是窗口或控件的句柄;
参数 4:IParam-通常是一个指向内存中数据的指针。
(2)SendMessage 与 PostMessage 的区别
PostMessage 只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而 SendMessage 必须等待其他程序处理
消息完了之后才返回,继续执行,这是个同步消息投放函数。而且,PostMessage 的返回值表示 PostMessage 函数执行是否正确;而 SendMessage 的返回
值表示其他程序处理消息后的返回值。
如果在同一个线程内,PostMessage 发送消息时,消息要先放入线程的消息队列,然后通过消息循环 Dispatch 到目标窗口。SendMessage 发送消息时,
系统直接调用目标窗口的消息处理程序,并将结果返回。 SendMessage 在同一线程中发送消息并不入线程消息队列。•如果在不同线程内。最好用
PostThreadMessage 代替 PostMessage,他工作的很好。SendMessage 发送消息到目标窗口所属的线程的消息队列,然后发送消息的线程等待(事实上,他
应该还在做一些监测工作,比如监视 QS_SENDMESSAGE 标志),直到目标窗口处理完并且结果返回,发送消息的线程才继续运行。这是 SendMessage 的一
般情况,事实上,处理过程要复杂的多。比如,当发送消息的线程监测到有别的窗口 SendMessage 一个消息到来时,他直接调用窗口处理过程(重入),并将