gpt4 book ai didi

c# - 广播 Windows HWND_BROADCAST 消息

转载 作者:行者123 更新时间:2023-11-30 13:41:01 25 4
gpt4 key购买 nike

我正在这个应用程序中的一个应用程序中工作,我将等待应用程序 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);

应用程序 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());

应用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);
}

有人会指出这段代码有什么问题吗?我怀疑 SendNotifyMessage 有问题

lparam and wparam parameters

有人会建议我实现此行为的任何其他替代方案吗?

最佳答案

  1. 不存在有问题的代码。只存在不执行您预期的操作的代码。如果你想让我们告诉你上面代码的问题是什么,你应该告诉我们你期望它做什么,(好吧,我们可以猜到,)但最重要的是,它做了什么。你收到错误了吗?它只是默默地失败了吗?你知道,这是问题的重要组成部分!

  2. 您正在使用 RegisterWindowMessage() 和 SendNotifyMessage() 等方法,但您没有向我们展示其定义。当我们不知道如何声明 SendNotifyMessage() 时,我们应该如何判断问题是否出在 SendNotifyMessage() 上?

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

  4. HWND_BROADCAST 只向顶层窗口发送消息。你确定你的窗口是顶级窗口吗?

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

  6. “MYMESSAGE”不是一个很好的消息名称。如何使用更独特的东西,例如您的名字和姓氏,或者创建一个 guid 并将其字符串表示形式用作您的消息的名称?

关于c# - 广播 Windows HWND_BROADCAST 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6225318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com