发送WM_COPYDATA但在接收端获取WM_ACTIVATEAPP

时间:2010-12-16 17:27:48

标签: c# process ms-word add-in wm-copydata

我有以下情况:

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

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

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

当它是运行应用程序的用户时,一切正常。

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

我不知道为什么会发生这种情况以及如何解决这个问题。我用谷歌搜索了几个小时,没有任何帮助...

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

获取WM_ACTIVATEAPP消息是很正常的,这是Windows发送的常见通知的一部分。不要认为你将获得的第一个消息是WM_COPYDATA,继续寻找。如果你根本没有得到它,那么你用来发送消息的窗口句柄是错误的。这是一个非常常见的问题,准确找回窗口并不容易。

.NET框架已经非常支持可以从第二个实例检索命令行的单实例应用程序。考虑使用它。请检查此blog post