3


0

私は、Windowsサービスとして起動されるキーボードとマウスのフックを作りたいです。 私は一日を通してシステムを使用するさまざまなユーザーの活動を監視したいです。 すなわち どのユーザーがいつアクティブになりますか。

どのユーザーがイベントを受け取るかを決定することは可能ですか? (サービスは別のユーザーとして実行されるため、getCurrentUserは適切ではありません)

4 Answer


1


いいえ、Environment.UserNameは機能しません - フックプロシージャは入力レシーバのコンテキストでは呼び出されません。

確かに、これは不可能だと思います - .NETを使用している場合に使用する疑いのない_LLフックは、低レベルのフックです。 Windowsがどのデスクトップ/アプリケーションがイベントを受け取るかを決定する前に、それらが実行される前に私は思われます。 私は間違っているかもしれません - 私は_LLフックを使ったことは一度もありません。


0


@TcKs - ええと、ユーザーの簡易切り替えについてはどうですか。


0


別の方法:

WTSGetActiveConsoleSessionId関数を使用すると、アクティブセッションのIDを取得できます。 コンクリート:

_ WTSGetActiveConsoleSessionId関数は、物理コンソールに現在接続されているターミナルサービスセッションを取得します。 物理コンソールは、モニター、キーボード、およびマウスです。 この機能が成功するためにターミナルサービスが実行されている必要はないことに注意してください。 _

その後、http://msdn.microsoft.com/ja-jp/library/aa383840(VS.85).aspx[WTSQueryUserToken]を使用してユーザーのトークンを取得することで、ユーザーに関する情報を取得できます。トークン。

この機能はターミナルサービスからのものですが、ドキュメントには次のように記載されています。

_ この機能が成功するためにターミナルサービスが実行されている必要はないことに注意してください。 _

だから私は思う、これは方法になることができます。


-2


私はこれらのフックについて知りません - それらはRemote Desktopキーボードからイベントを受け取りますか? 彼らが唯一のローカルキーボードを取得する場合は、その後、私はあなたがWinSta0の所有者を見つける必要があると思います。