3

私は2つのプログラムを持っていますが、そのうちの1つが他のプログラムにメッセージを送信する方法が必要です。Win32 APIのSendMessage関数を調べましたが、ウィンドウハンドルがあればうまく機能しますが、サービスでログオフしているときにプログラムを実行できる必要があります。つまり、ウィンドウハンドルを作成できません。 。

ウィンドウハンドルを作成せずに別のプロセスからメッセージを受信する方法はありますか?Win32に、ウィンドウハンドルがあることに依存しないようにメッセージングにフックできる他の方法があるかどうかを確認してきましたが、基本的なレベルでプロセス間で通信する方法が必要です。ありませんか?

私はこれを行うためにPipeを使用することを検討しましたが、実際に探しているよりもはるかに高いレベルであることに加えて、大きなアクセス許可の問題に遭遇しました。私ができる必要があるのは、単純なカスタムintメッセージを送信することだけです。そうすれば、私のプロセスはシャットダウンする時が来たことを知ることができます。

4

3 に答える 3

4

他のプログラムにシャットダウンを通知するのと同じくらい簡単な場合は、名前付きイベントを作成できます。どちらのプロセスも同じ名前のイベントを作成します。1つはそれを監視し、もう1つはそれを通知できます。監視している人は、PeekMessageの代わりにMsgWaitForMultipleObjectsを使用する変更されたメッセージポンプを使用してそれを行うことができます。

悪意のあるプロセスが同じ名前のイベントを作成し、他のアプリケーションを終了させる可能性があるため、ここではサービス拒否のリスクがわずかにあります。

より高度な通信が必要な場合は、パイプ、メールスロット、共有メモリ、ファイルウォッチ、レジストリウォッチ、または別の同期可能なカーネルイベント(Mutex、Semaphoreなど)を使用する必要があります。

于 2012-09-18T23:00:02.507 に答える