在Windows中,可使用消息机制进行线程间,或进程间的通信,具有简单高效的特点。其中SendMessage和PostMessage和PostThreadMessage都可以在线程和进程之间通信,区别在于SendMessage是阻塞的,面向窗口的(即必须传入窗口句柄),PostMessage是非阻塞的,面向窗口的,PostThreadMessage是面向线程的,不需要传入窗口句柄。这些函数都可以在不同进程之间使用。在应用范围内,如果要发送自定义消息,参考下面的MSDN有如下描述:
For sending private messages within a window class, an application can use any integer in the range WM_USER through 0x7FFF. (Messages in this range are private to a window class, not to an application.
意思是消息的范围必须在WM_USER一直到0x7FFF之间,但这是针对某一个窗口的,不同窗口之间可以重复。
在不同的应用之间,也可以使用SendMessage和PostMessage发送消息,消息范围也可以是以上范围。
PostThreadMessage的作用是向指定的线程发送消息,需要知道线程id,而获得一个窗口所属的线程id的函数是
DWORD GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId );
特别地,对于广播的消息发送,选择窗口句柄为HWND_BROADCAST,要对不同应用同时发送消息,可以使用RegisterWindowMessage函数传入相同的字符串返回同一个消息id,其范围在0xC000到0xFFFF