广播Windows HWND_BROADCAST消息

Zai*_*Ali 3 c# winapi ipc

我在这个应用程序中的应用程序中工作我将等待应用程序1中的某个事件,当这个事件发生时,我将发送消息到应用程序2,它将执行某些操作.

第一个API声明

private const int HWND_BROADCAST = 0xffff;

 [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern int RegisterWindowMessage(string lpString);

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        static extern bool SendNotifyMessage(int hWnd, int Msg, int wParam, int lParam);
Run Code Online (Sandbox Code Playgroud)

申请1代码

private string msgstr = "MYMESSAGE";              
public int  msg = RegisterWindowMessage(msgstr);
                if (msg == 0)
                {
                    MessageBox.Show(Marshal.GetLastWin32Error().ToString());
                }

                //SendNotifyMessage(HWND_BROADCAST, msg, 4848484, 8484865);

                SendNotifyMessage(HWND_BROADCAST, msg, 0, 0);

                MessageBox.Show(Marshal.GetLastWin32Error().ToString());
Run Code Online (Sandbox Code Playgroud)

申请2代码

 static readonly int msg = RegisterWindowMessage("MYMESSAGE");
     protected override void WndProc(ref Message m)
        {
            if (m.Msg == msg)
            {
                MessageBox.Show(m.Msg.ToString() + " = from wndproc");
            }
            base.WndProc(ref m);
         }
Run Code Online (Sandbox Code Playgroud)

有人会指出这段代码有什么问题.我怀疑SendNotifyMessage存在问题

lparam和wparam参数

有人会建议我实现这种行为的任何其他选择!

Mik*_*kis 5

  1. 不存在有问题的代码.只有代码不能按预期执行.如果您希望我们告诉您上述代码的问题,您应该告诉我们您的预期,(好吧,我们可以猜到),但最重要的是,它做了什么.你收到错误了吗?它只是默默无法工作吗?你知道,这是一个问题的重要部分!

  2. 您正在使用RegisterWindowMessage()和SendNotifyMessage()等方法,这些方法是您未向我们展示的定义.当我们不知道如何声明SendNotifyMessage()时,我们如何判断问题是否与SendNotifyMessage()有关?

  3. 您的应用程序2有一个WndProc,您希望在其中接收窗口的消息.它是否已正确注册?你确定它有效吗?它是否收到其他窗口消息?如果您从应用程序2中发送它,它是否会收到"MYMESSAGE"?

  4. HWND_BROADCAST仅向顶级窗口发送消息.你确定你的窗户是一个顶级窗口吗?

  5. 您没有检查应用程序2中对RegisterWindowMessage()的调用是否成功.首先检查一下怎么样?

  6. "MYMESSAGE"不是一个非常好的消息名称.如何使用更独特的东西,比如你的名字和姓氏,或者创建一个guid并使用它的字符串表示作为你的消息的名字?