读书人

C#中发送消息SendMessage中参数有关问

发布时间: 2012-02-24 16:30:39 作者: rapoo

C#中发送消息SendMessage中参数问题
场景如下:
将系统中的日志在启动画面中显示,如是想到用消息机制。
首先定义消息,这个不表。
然后是引用windowsApp:

C# code
        [DllImport("User32.dll", EntryPoint = "SendMessageA")]        private static extern int SendMessage(             int hWnd, // handle to destination window              int Msg, // message              int wParam, // first message parameter              string lParam // second message parameter             );        private static extern int FindWindow(string lpClassName, string lpWindowName);        public static void SendMsgToFlashForm(int MSG, IntPtr wParam, string lParam)        {            int WINDOW_HANDLER = FindWindow(null, @"XXXX");            if (WINDOW_HANDLER == 0)            {                throw new Exception("Could not find Main window!");            }            SendMessage(WINDOW_HANDLER, MSG, wParam, lParam);        }


调用地方:
C# code
 MessageController.SendMsgToFlashForm(MessageManager.MyMessage.WM_SHOW_PROCESS, IntPtr.Zero, "系统开始创建核心对象");


接收的地方:
C# code
            try            {                switch (m.Msg)                {                    case Utility.CommonUtility.MessageManager.MyMessage.WM_SHOW_PROCESS:                        {                            label2.Text = m.LParam.ToString();                            break;                        }                    default:                        base.DefWndProc(ref m);//调用基类函数处理非自定义消息。                        break;                }            }

现在问题是:
在接收的地方,总是收不到正确的东西,例如,我应该在这里收到是字符串的内容,结果总是返回一组数字!!

为什么?麻烦周末有达人帮解决!!

[解决办法]
mark
[解决办法]
还没用过User32.dll呢!!
[解决办法]
C# code
 用StringBuild private static extern int SendMessage(             int hWnd, // handle to destination window              int Msg, // message              int wParam, // first message parameter              StringBuild lParam // second message parameter             );
[解决办法]
同进程可以这样:
C# code
[DllImport("User32.dll")]private static extern int SendMessage(int hWnd, int Msg, int wParam, string lParam);private const int WM_USER = 0x0400;private void button1_Click(object sender, EventArgs e){    SendMessage((int)Handle, WM_USER + 10, 0, "Zswang 路过");}protected override void WndProc(ref Message m){    switch (m.Msg)    {        case WM_USER + 10:            MessageBox.Show(Marshal.PtrToStringAnsi(m.LParam));            break;    }    base.WndProc(ref m);}
[解决办法]
探讨
非常感谢Zswang,
好像不止一次帮我解决问题,!

[解决办法]
探讨
那家伙耍了我2000分...恨之入骨

读书人网 >C#

热点推荐