4

Windows API ::FindWindow 関数がサービス アプリケーションから呼び出されると失敗します。GetLastError() も 0 (成功?) を返します。これは何らかの特権\アクセス権の問題ですか? これは設計上の問題であり、別の IPC 方法を使用する必要があると思いますか?

4

2 に答える 2

6

leppie の言うとおり、Windows サービスは通常、デスクトップとのやり取りで拒否されます。XP 以前のバージョンではバイパスできますが、Vista 以降ではできません。デスクトップとユーザーの対話を GUI アプリケーションに委任することをお勧めします。詳細については、このドキュメントを参照してください。

于 2008-12-04T11:37:50.050 に答える
5

サービスはセッション 0 で実行されます。XP 以前では、最初にログインしたユーザーもセッション 0 で実行され、後続のユーザーはセッション 1 以降で実行されます。サービスが「Interact with the Desktop」に設定されている場合、セッション 0 で実行されているすべてのユーザー ウィンドウにアクセスできます。ただし、Vista 以降、ユーザーはセッション 0 で実行されなくなりました。セッションの境界を越えてウィンドウにアクセスすることはできないため、FindWindow() はそれが呼び出されたセッションのコンテキストでのみ機能します。

于 2009-06-17T01:47:27.663 に答える