Windows消息的基本功能
using System;
using System.Runtime.InteropServices;namespace WindowsAPILibrary
{
/// <summary>
/// 提供Windows消息的基本功能。
/// </summary>
public class WindowsMessage
{
/// <summary>
/// 构造函数
/// </summary>
public WindowsMessage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

/// <summary>
/// 用户自定义消息
/// </summary>
public const int WM_USER = 0x0400;
/// <summary>
/// 应用程序自定义消息
/// </summary>
public const int WM_APP = 0x8000;
/// <summary>
/// 发送消息,立即返回。
/// </summary>
/// <param name="HWnd">接收消息窗口句柄,<code>Form.Handle</code></param>
/// <param name="Msg">消息标志</param>
/// <param name="WParam">消息参数</param>
/// <param name="LParam">消息参数</param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern long PostMessage( IntPtr HWnd, int Msg, IntPtr WParam,IntPtr LParam );
/// <summary>
/// 发送消息,等待返回。
/// </summary>
/// <param name="HWnd">接收消息窗口句柄,<code>Form.Handle</code></param>
/// <param name="Msg">消息标志</param>
/// <param name="WParam">消息参数</param>
/// <param name="LParam">消息参数</param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern long SendMessage( IntPtr HWnd, int Msg, IntPtr WParam,IntPtr LParam ); }
}
调用的时候override窗体的DefWndProc(ref Message m)方法,protected override void DefWndProc(ref Message m)
{
if(m.Msg == 0x8000)
{
                              do what you want.......                            }
base.DefWndProc (ref m);
}

解决方案 »

  1.   

    API:
    [DllImport("user32.dll", EntryPoint="RegisterWindowMessage")]
    public static extern int RegisterWindowMessage (
    string lpString
    );该函数定义一个新的窗口消息,该消息确保在系统中是唯一的。返回的消息值可在调用函数SendMessage或PostMessage时使用。如果消息被成功注册,返回值是在范围OxCOOO到OxFFFF的消息标识符;如果函数调用失败,返回值是零。要得到更多的错误信息,调用函数GetLastError。当一个以上的应用程序必须处理同一个消息时,必须使用RegisterWindowMessage。要在窗口类里发送私有消息,应用程序可以使用UM_USER到OX7FFF范围内的任意整数例子:
    string mymessage="wm_log";
    int messageid=0;
    messageid=RegisterWindowMessage(mymessage);//不同的过程调用会返回相同的messageid
    //调用API sendmessage 发送messageid到主线程的窗口就可以了。