- public static Message Create(
- IntPtr hwnd,//接收消息的窗口句柄
- int msg, //消息 的ID,也就是一个uint
- IntPtr wparam,// 消息的Wparam域
- IntPtr lparam //消息的Lparam域
- }
比如我们要发送一个字符串到记事本:
- string text ="范俊武搞的一个窗口消息测试!";//
- char[] chars = text.ToCharArray();//转换成数组
- foreach (char item in chars)
- {
- Message msg = Message.Create(hWnd, WM_CHAR,
- new IntPtr(item), IntPtr.Zero);
- //创建一个WM_CHAR消息.一会说这里边的参数是怎么一回事
- MessageAPI.PostMessage(msg.HWnd, msg.Msg,
- msg.WParam, msg.LParam);//调用Win32API函数 ,
- //关于这个函数在C#中的声明我就不写了网上有很多关于C#中平台调用的讲解.
- }
C#发送消息之WM_CHAR介绍,它是Windows中的一个消息. MSDN是这样定义的:
The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_CHAR message contains the character code of the key that was pressed.
我粘贴过来,大家看下,我英语不是很好,翻译不过来,不过我可以看明白是咋地一回事!大致是这个意思.当我们按下一个键的时候,产生一个WM_KEYDOWN 然后呢,这个消息被一个TranslateMessage 函数翻译成WM_CHAR消息.显然WM_CHAR消息携带了一个字符,比方说我们按了个字母"A"键,WM_CHAR就携带了"a" 这个character.
另外Create函数的第二个参数是Int型的.我们可以在Windows.h中看到WM_CHAR其实是一个常量:0x0102,一个十六进制数.WM_CHAR的ID号.代表WM_CHAR消息.
所以第二个参数是这么来的:
- const int WM_CHAR = 0x0102;
WM_CHAR的消息中 wParam 是这么定义的,又是一段英文:Specifies the character code of the key. 就是一个按键的字符.
WM_CHAR的消息中 lParam ,这个参数比较复杂,是一个32位数,每一位都有定义.不过这个参数经常被设置成0.
那么hWnd从哪里来的呢,就是我们要发送消息到记事本窗口的句柄.这个句柄也是一个32位值.我们可以调用Win32API函数
- string className = "Notepad";
- string captionName = "无标题 - 记事本"; //可以通过SPY++了解到.
- IntPtr hWnd=FindWindow(className ,captionName);//找主窗口.
- hWnd = FindWindowEx(hWnd, IntPtr.Zero, "Edit", "");找主窗口中的Edit窗口.
PostMessage 就是发送消息了,各个参数都是在我们创建的消息Msg中包含的.挺简单的.
至于wParam和lParam 不同的消息 会有不同的定义,我们想发送什么消息,就去MSDN中关于这个消息的定义,可以了解到wParam和lParam 的意义!