日期:2014-05-19  浏览次数:21693 次

c# 调用API函数 SendMessage,没有成功(附有代码)
在Form1.cs文件中:

using   System.Runtime.InteropServices;

[DllImport( "user32.dll ",   EntryPoint   =   "SendMessageA ")]
private   static   extern   int   SendMessage(IntPtr   hWnd   ,int   wMsg,   int   wParam,   int   lParam);

private   void   button1_Click(object   sender,   EventArgs   e)
{
        SendMessage(this.button1.Handle,   TestMessage.TEST1,   100,   101);
}     //TestMessage.TEST1   为定义的消息常量,调试显示正常

protected   override   void   DefWndProc(ref   System.Windows.Forms.Message   m)
{
        switch(m.Msg)
        {
                case   TestMessage.TEST1:
                        string   message   =   string.Format( "收到消息:参数{0},   {1} ",   m.LParam,   m.WParam);
                        MessageBox.Show(message);
                        break;

                default:
                        base.DefWndProc(ref   m);
                        break;
        }
}

编译通过,但调试发现没有进入   case   TestMessage.TEST1:

是怎么回事啊?
谢谢!

------解决方案--------------------
PostMessage试试
------解决方案--------------------
1.DefWndProc 是一个方法,它的作用是向默认处理函数发送制定消息,而不是处理消息.也就是说某种程度上就是SendMessage.

而处理消息的是WndProc.

2.SendMessage发送的handle应该是form的handle,而不是控件,改成this.Handle