2010-12-16 6 views
0

にWM_ACTIVATEAPPを取得:はWM_COPYDATAを送信するが、私は次のシナリオを持っている受信側

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

最初に実行された後、私のアプリケーションは常に1つのインスタンスを実行し、必要でないときにフォームを隠すのではなく、明示的にシャットダウンするまでそのインスタンスをメモリに保存します。

ユーザーがもう一度アプリケーションを実行しようとすると、プロセスが開始され、メモリ内に別のメモリがあるかどうかがチェックされ、それが真であればメモリから取得したデータと共にメモリ内のプロセスにWM_COPYDATAメッセージを送信しますコマンドラインを終了して終了します。

アプリを実行しているユーザーはすべてうまく動作します。

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

私はなぜそれが起こっているのか、どのように修正するのかについては考えていません。私は何時間もgoogledして何も助けなかった...

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

答えて

1

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

.NET Frameworkは、すでに2番目のインスタンスからコマンドラインを取得できるシングルインスタンスのアプリケーションをサポートしています。代わりに使用することを検討してください。これをチェックしてくださいblog post

+0

Kinda late answerしかし、ここに行く:答えをありがとう。私は最初のメッセージを受け取っていただけでした。私はそれらのすべてを手に入れて、正しいものを見つけようとしています。あなたの提案について、私はC#アプリケーションでVBのものを使いたいと思ってMSMQを使用してしまった。それでも、私はあなたに尋ねます:どのように私はすべてのメッセージを取得するのですか? WndProcは一度だけ呼び出されていたので、私はただ一つのメッセージしか持っていなかった。いずれにしても、助けてくれてありがとう。 :) +1 P. - メッセージで何が起きているのかを知る手がかりとなり、MSMQを見つける手助けをしてくれたので、回答としてマークしました – osiris

+0

これは "VB stuff"だと思いますか?これはC#で書かれています。 .NETで言語を自由に組み合わせる機能は、バグではなく機能です。それは感染性ではありません。 –

関連する問題