7

通常、同じシステムで 2 つのプロセスが実行されているシステムがあります。1 つのプロセスが GUI を処理し、もう 1 つのプロセスがサービスのように実行されます (ただし、歴史的な理由から、これはサービスではなく、ウィンドウが表示されない単なる exe です)。

2 つのプロセスは、主に登録されたメッセージを介して IPC を非同期RegisterWindowMessage()に実行します。つまり、サーバー プロセスへの API を効果的に形成する大量のメッセージ セットを両方のプロセスで使用します。

私は、両方のプロセスのメッセージ キューを監視および表示し、API の使用方法と通知が GUI プロセスに伝達される方法をある程度デコードするために使用する「ハンズフリー」監視アプリケーションを作成しSetWindowsHookEx()ました (個々のウィンドウは、サーバーからの通知を直接サブスクライブできます)。

そのため、双方向に多数のメッセージがあるため、フィルタリングや集計カウントなどを使用して、特定のアクティビティに集中できます。これはすべて、ライブ コードに影響を与えることなく実行できます。これは良いことです。

これはすべてうまく機能しますが、サーバーによって処理されたときに同じメッセージを追跡できるように、GUI で発信されたメッセージに「タグ付け」できると非常に便利です。これは、システムの問題のデバッグと診断に非常に役立ちますが、登録済みのメッセージ API にそのようなサポートを追加せずにこれを行うクリーンな方法を見つけることができません (実際には方法が見つかりません!)。仕事のことであり、現時点で私が満足しているよりも多くのリスクを伴います。PostMessage()サーバーがいくつかのメッセージを前処理してから、サーバー自体に戻ってアクションを実行するため、元のメッセージが「失われる」可能性があるため、さらに複雑になります。

この種の問題に取り組んだ人はいますか?もしそうなら、私にいくつかの指針を教えてもらえますか?そうでない場合、データの小さなブロックを Windows メッセージに追加し、後でそれを取得する文書化された方法または文書化されていない方法はありますか? 私は見てきましたSetMessageExtraInfo()が、それはメッセージごとではなくキューごとのようです。

4

1 に答える 1