C# 发送WM_COPYDATA但在接收端获取WM_ACTIVATEAPP

C# 发送WM_COPYDATA但在接收端获取WM_ACTIVATEAPP,c#,process,ms-word,add-in,wm-copydata,C#,Process,Ms Word,Add In,Wm Copydata,我有以下情况: 我的应用程序从命令行获取一些数据 在第一次执行之后,我的应用程序总是运行一个实例,并且该实例将在内存中,直到用户明确告诉它关闭,而不是在不需要时隐藏表单 当用户第二次尝试运行应用程序时,进程启动,检查内存中是否有另一个应用程序,如果是真的,则向内存中的进程发送WM_COPYDATA消息,其中包含从命令行获得的数据,然后退出 当用户运行应用程序时,这一切都很好 我需要从MicrosoftWord2003工具栏运行它,所以我使用了一个“加载项”。问题是,当我的应用程序从该外接程序启动

我有以下情况:

我的应用程序从命令行获取一些数据

在第一次执行之后,我的应用程序总是运行一个实例,并且该实例将在内存中,直到用户明确告诉它关闭,而不是在不需要时隐藏表单

当用户第二次尝试运行应用程序时,进程启动,检查内存中是否有另一个应用程序,如果是真的,则向内存中的进程发送WM_COPYDATA消息,其中包含从命令行获得的数据,然后退出

当用户运行应用程序时,这一切都很好

我需要从MicrosoftWord2003工具栏运行它,所以我使用了一个“加载项”。问题是,当我的应用程序从该外接程序启动时(使用Process类),内存中已经存在的进程似乎会收到WM_ACTIVATEAPP消息,而不是WM_COPYDATA消息,因此我无法从外接程序启动的进程中获取所需的数据

我不知道为什么会发生这种情况以及如何解决它。我已经在谷歌上搜索了几个小时,但没有任何帮助


有人能帮忙吗?

收到WM_ACTIVATEAPP消息是很正常的,这是Windows发送的常见通知的一部分。不要假设你得到的第一条信息是WM_COPYDATA,继续寻找。如果你根本不明白,那么你用来发送消息的窗口句柄就错了。这是一个非常常见的问题,要准确地找到一个窗口并不是那么容易


NET framework已经很好地支持可以从第二个实例检索命令行的单实例应用程序。考虑使用它。检查此项。

回答得有点晚,但问题是:谢谢你的回答。我只是得到了第一条信息,我应该得到所有的信息,并努力找到正确的信息。关于你的建议,我不想在C#app中使用VB的东西,结果使用了MSMQ。不过,我还是要问你:我如何获得所有的信息?WndProc只被呼叫过一次所以我只收到一条消息。。。不管怎样,谢谢你的帮助。:)+1 P.S.-我将其标记为“答案”,因为它帮助我找到了消息中可能发生的情况,并且给出的建议帮助我找到了MSMQWhat使你认为这是“VB东西”?它是用C写的。在.NET中自由混合语言的能力是一项功能,而不是一个bug。它没有传染性。