2012-03-15 3 views
2

사용자가 여러 사용자가있는 컴퓨터에서 로그인 할 때와 사용자가 로그 아웃 할 때 (또는 컴퓨터를 잠그면) 확인하는 Windows 서비스를 만들어야합니다. 이 정보는 사용자가 로그인 한 시간 (유휴 시간은 신경 쓰지 않습니다)을 계산하거나이 마지막 부분을 직접 얻을 수있는 경우 더 좋습니다. (사용자가 코드를 당긴다면 상관 없습니다. 서비스가 현재 사용자를 폴링하고이 정보를 로깅하므로 다음에 컴퓨터가 깨어 났는지 여부를 알 수 있습니다. 정확한).로그인 한 현재 사용자와 로그 한 시간을 확인하는 방법

특정 제한 시간을 초과하면 사용자를 걷어차 기 위해이를 알아야합니다.

나는 C# 또는 Delphi를 사용할 것이므로이 정보를 얻기 위해 어떤 API가 필요한지 알려 주시면 감사하겠습니다.

어린이 컴퓨터 사용량을 확인하기 위해 타겟팅 된 소프트웨어가 이미 있습니다. 그런 종류가 필요하지만 자녀를 시청하는 것보다 다른 용도로 맞춤 설정합니다.

실제로 사용자가 로그인 한 시간을 알 필요가있을 수 있습니다. 나머지는 스스로 계산할 것입니다.

+0

파워 코드를 꺼내는 사람도 고려해야합니다. –

+1

성공적인 로그인을 위해 감사를 설정하십시오. 그런 다음 서비스에서 적절한 이벤트에 대한 이벤트 로그를 보도록하십시오. – JamieSee

답변

2

정보 출처는 SECURITY_LOGON_SESSION_DATA입니다. LsaGetLogonSessionData 또는 LsaEnumerateLogonSessions을 사용할 수 있습니다. 스레드 (또는 사용자 로그온 토큰)의 세션 ID를 얻으려면 GetTokenInformationTokenSessionId을 매개 변수로 사용할 수 있습니다.

the old answer에는 작은 데모의 소스 코드가 있습니다.

당신이 모니터 사용자 로그인과 로그 오프를해야하는 경우 나는 당신의 Windows 서비스에서합니다 (System Event Notification Service (SENS)의 참조) ISensLogon2 콜백 인터페이스를 구현하는 방법을 추천 할 것입니다. C#에서 사용할 계획이면 the article을 추천합니다.

+0

감사합니다. 매우 유용한 기사입니다. –

+0

@CraigStevenson : 천만에요! – Oleg

0

이 정보를 얻으려면 Windows 이벤트 로그를 조사해야합니다. 에릭 피츠 제럴드 (Eric Fitzgerald)는이 중 일부에 대해 이야기합니다. here. 또한 그는 "LogOff"이벤트에 의존하는 방법이 신뢰할 수 없다는 점에서 here에 연결합니다. 전원 코드를 꺼내는 사람들에 대한 위의 내 의견을 언급합니다.

기사는 또한 워크 스테이션 등의 관련 특이성이, 등등 ...

3

가 상영, LogonId 및 로그온 유형의 속성을 확인하십시오 Win32_LogonSession WMI 클래스를 시도 잠긴 언급. 또한 Win32_Session 클래스를 살펴볼 수도 있습니다.

관련 문제