2012-04-18 14 views
0

私はWindowsサービスアプリケーションを持っており、ログオンした各ユーザーセッションで実行されているクライアントアプリケーションもウィンドウしています。各クライアントアプリケーションでRegisterWindowMessageを呼び出してそこにそのメッセージをトラップしようとすると。また、サービスアプリケーションで同じメッセージ名のRegisterWindowMessageを呼び出してから、サービスから再度SendNotifyMessageへの呼び出しに使用して、各クライアントアプリケーションに単一のイベントを通知します。SendNotifyMessage APIはユーザーセッション全体で機能しますか?

PS。私はC++/MFCとネイティブWinAPIを使ってプログラムを作成します。

答えて

1

サービスアプリケーションがシステムアカウントで実行されている場合、には、は、ユーザーアカウントのアプリケーションにメッセージを送信できません。すべて のwindowstation、

  • オープンこれらの局(OpenWindowStation)、駅
    • パー
    • を取得するために、すべてのセッション(WTSEnumerateSessions)を介して

      • ゴー:

        あなたは、次のアプローチを試すことができますステーションとのプロセスの関連付け(SetProcessWindowStation)

      • すべてのステーションのデスクトップ(Enumdesktops)、
      • がするまで、すべてのウィンドウ(EnumdesktopWindows)を通過しますあなたのあなたはおそらくしかしUACの問題を持っています

    あなた アプリケーションのウィンドウの一つを発見しました。

  • +0

    ありがとうございます。私はちょうどそれを試して難しい方法を学んだ))そう、ええ、私は上記の方法は動作しないことを確認することができます。そのAPIのドキュメントにその情報が表示されたかったら... ...まあ、グローバルなイベントに戻ってくると思います。 Windowsサービスとユーザーモードプロセス間の通信がより簡単になることを願っています。 – ahmd0

    +1

    サービスとユーザーモードプロセス間の通信方法は、ユーザーモードプロセスが[COM] (http://msdn.microsoft.com/en-us/library/ms809975.aspx)またはRPC。標準的なシステムサービスの仕組みです。 –

    関連する問題