0

次のシナリオがあります。

私のアプリは、コマンド ラインからデータを取得します。

初めて実行された後、私のアプリは常に 1 つのインスタンスを実行し、そのインスタンスは、必要のないときにフォームを非表示にするのではなく、明示的にシャットダウンするように指示されるまでメモリ内にあります。

ユーザーがアプリを 2 回目に実行しようとすると、プロセスが開始され、メモリ内に別のプロセスがあるかどうかがチェックされます。それが true の場合は、コマンド ラインから取得したデータを使用して、メモリ内のプロセスに WM_COPYDATA メッセージが送信されます。終了します。

アプリを実行するのがユーザーである場合、それはすべてうまく機能します。

Microsoft Word 2003 ツールバーから実行する必要があったため、そのために「アドイン」を使用しました。問題は、(Process クラスを使用して) そのアドインからアプリを起動すると、既にメモリ内にあるプロセスが WM_COPYDATA メッセージではなく WM_ACTIVATEAPP メッセージを取得しているように見えるため、必要なデータを取得できないことです。アドインによって開始されたプロセス。

なぜそれが起こっているのか、それを修正する方法はわかりません。私は何時間もグーグルで検索しましたが、何も役に立ちませんでした...

誰でも助けることができますか?

4

1 に答える 1

1

WM_ACTIVATEAPP メッセージを受け取るのはごく普通のことで、Windows が送信する通常の通知の一部です。最初に表示されるメッセージが WM_COPYDATA だとは思わないでください。まったく取得できない場合は、メッセージの送信に使用したウィンドウ ハンドルが間違っています。これは非常に一般的な問題であり、ウィンドウを正確に見つけるのはそれほど簡単ではありません。

.NET フレームワークは、2 番目のインスタンスからコマンド ラインを取得できる単一インスタンス アプリを既に非常に適切にサポートしています。代わりに使用することを検討してください。このブログ投稿を確認してください。

于 2010-12-16T18:12:45.237 に答える