关于C#中使用消息获取Message.LParam所包含的数据
在C#中也可以使用Windows 消息,包括系统消息和自定义消息。
对于自定义消息中,对于LParam可以在发中或者接收过程中使用自定义结构来传递数据
如:
public struct MyStruct
{
}
MyStruct myst = new MyStruct();
SendMessage(hWnd, WM_USER, 0,ref myst);
接收消息可通过重写DefWndProc来实现
protected override void DefWndProc(refSystem.Windows.Forms.Message m)
但是对于一些非自定义的消息,如WM_SETTEXT,或者一些第三方应用所发出的消息,其中的LParam中可能包含的是一个指向字符串的指针,如char*,那么这时候如何取得LParam中的实际数据呢?
以一自定义消息为例,通过该消息的m.LParam.ToString()得知存储的数据类型为"String",
但是使用GetLParam获取会出现错误,因为GetLParam只接受结构类型,那怎么办呢?
那就是使用Marshal.Copy,将数据从非托管内存指针复制到托管 8 位无符号整数数组.
如下:
byte[] ch = new byte[256]
System.Runtime.InteropServices.Marshal.Copy(m.LParam,ch,0,255);
string str = System.Text.Encoding.Default.GetString(ch);
这样,就成功获得了m.LParam所包含的字符数据。