2008-09-23 5 views
3

Windows 서비스로 시작될 키보드 및 마우스 훅을 만들고 싶습니다. 하루 종일 시스템을 사용하는 다양한 사용자의 활동을 모니터링하고 싶습니다. 즉 어떤 사용자가 활성 일 때 어떤 시간에 활성 상태인지를 나타냅니다..NET에서 전역 키보드 후크 내에서 현재 사용자를 확인할 수 있습니까

어떤 사용자가 일정을 받을지 결정할 수 있습니까? (서비스는 별도의 사용자로 실행되므로 getCurrentUser는 적절하지 않습니다.)

+1

와우,이 응용 프로그램은 "큰 형님"불길한 소리! –

답변

1

아니요, Environment.UserName이 작동하지 않습니다. 입력 수신기의 컨텍스트에서 후크 프로 시저가 호출되지 않습니다.

실제로, 나는 이것이 불가능하다고 생각합니다. _LL 후크는 .NET을 사용하는 경우 의심 할 여지없이 저수준 후크입니다. Windows에서 어떤 데스크톱/응용 프로그램이 이벤트를 수신할지 결정하기 전에 이러한 이벤트가 잘 실행 된 것으로 보입니다. 나는 틀릴 수도 있습니다. - 나는 결코 자신의 후크를 사용하지 않았다.

0

@TcKs - 음, 빠른 사용자 전환은 어떻게됩니까?

+0

네, 사실입니다 - 잊어 버렸습니다. 아마도 (http://msdn.microsoft.com/en-us/library/ms997634.aspx#winxpfus_switching) 도움이 될 수 있습니다. – TcKs

-2

이러한 후크에 대해 모르겠다 - 원격 데스크톱 키보드에서 이벤트를 수신합니까? 로컬 키보드 만 가져 오면 WinSta0의 소유자를 찾아야한다고 생각합니다.

0

또 다른 방법은 :

WTSGetActiveConsoleSessionId 기능을 사용하면 활성 세션의 ID를 얻을 수 있습니다. 콘크리트 :

WTSGetActiveConsoleSessionId 함수는 현재 실제 콘솔에 연결된 터미널 서비스 세션을 검색합니다. 물리적 콘솔은 모니터, 키보드 및 마우스입니다. 이 함수가 성공하려면 터미널 서비스를 실행할 필요가 없습니다.

사용자의 토큰을 가져 오는 데 WTSQueryUserToken을 사용할 수 있습니다. 그러면 토큰을 가진 사용자에 대한 정보를 얻을 수 있습니다.

이 기능은 터미널 서비스에서, 그러나 문서는 말한다 : 그것은 필요가 없습니다

하는 것으로이 함수가 성공하기 위해서는 터미널 서비스를 실행하는 것이.

이렇게 생각해 봅시다.

관련 문제