0

我有以下情况:

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

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

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

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

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

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

任何人都可以帮忙吗?

4

1 回答 1

1

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

.NET 框架已经对可以从第二个实例检索命令行的单实例应用程序提供了很好的支持。考虑改用它。检查这篇博文

于 2010-12-16T18:12:45.237 回答