我在这个应用程序中的应用程序中工作我将等待应用程序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参数
有人会建议我实现这种行为的任何其他选择!
不存在有问题的代码.只有代码不能按预期执行.如果您希望我们告诉您上述代码的问题,您应该告诉我们您的预期,(好吧,我们可以猜到),但最重要的是,它做了什么.你收到错误了吗?它只是默默无法工作吗?你知道,这是一个问题的重要部分!
您正在使用RegisterWindowMessage()和SendNotifyMessage()等方法,这些方法是您未向我们展示的定义.当我们不知道如何声明SendNotifyMessage()时,我们如何判断问题是否与SendNotifyMessage()有关?
您的应用程序2有一个WndProc,您希望在其中接收窗口的消息.它是否已正确注册?你确定它有效吗?它是否收到其他窗口消息?如果您从应用程序2中发送它,它是否会收到"MYMESSAGE"?
HWND_BROADCAST仅向顶级窗口发送消息.你确定你的窗户是一个顶级窗口吗?
您没有检查应用程序2中对RegisterWindowMessage()的调用是否成功.首先检查一下怎么样?
"MYMESSAGE"不是一个非常好的消息名称.如何使用更独特的东西,比如你的名字和姓氏,或者创建一个guid并使用它的字符串表示作为你的消息的名字?
归档时间: |
|
查看次数: |
9055 次 |
最近记录: |