문제

특정 Windows 기계가 현재 인간이 사용하고 있는지 아닌지 프로그래밍 방식으로 가장 간단한 방법은 무엇입니까?

제한된 인터넷 연결에 대한 "공손 모니터"를 작성하려고 생각하고 있습니다. 기본적으로 누가 현재 인터넷을 적극적으로 사용하고있는 사람을 확인하는 방법이므로 누군가 큰 파일을 다운로드해야 할 때 성가심을 최소화 할 수 있습니다. 다른 사람들에게 (그리고 그 통계를 역사적으로 유지하므로, 업 링크가 너무 느려지지 않을 때를 예측할 수 있습니다). 나는 활동을 추론하기 위해 사용할 수있는 여러 증거의 원천을 수집하려고 노력하고 있습니다.

Windows 사용자의 경우 마우스를 입력하거나 이동하는지 또는 다른 동등한 활동 척도를 확인하는 것이 매우 유용합니다. 나는 이미 사용을 고려했습니다 System.Diagnostics.Process 특정 프로세스가 실행 중인지 확인하기위한 클래스 (온라인 게임 및 기타 대역폭 헤비 앱)와 출시 시점. 지난 30 분 동안 일반적인 사용자 지대 프로세스 (Firefox, iTunes 등)가 출시 된 경우 의자에 앉아 무언가를하고 있다는 것이 합리적이라고 생각합니다. 활동이 감지되면 서버에 작은 HTTP Post 요청 ( "살아 있고 무언가를하고 있습니다!")을 보내고 Linux 상자에서 실행되는 WebApp이 사용자가 활성화되어 있음을 보여주기 위해 업데이트됩니다.

나는 IM 상태를 사용하는 것을 고려했지만 다른 IM 클라이언트는 다른 수준의 OS 통합을 가지고있는 것으로 보이며 사람들은 좋은 것만 큼 업데이트하지 않는 것 같습니다. 모든 Good Web 2.0 Citizens와 마찬가지로 저는 Twitter를 사용하고 있습니다. ;)

면책 조항 : 나는 창을 피하는 유닉스이고 Mac 남자입니다. 나는 Mono의 .NET과 함께 주위를 비롯했지만 전에는 Win32 API를 만지지 않았습니다. 온화하십시오.

도움이 되었습니까?

해결책

당신은보고 싶을 수도 있습니다 GetLastInputInfo:

그만큼 GetLastInputInfo 함수는 마지막 입력 이벤트의 시간을 검색합니다.

당신이 호출하는 Windows API 기능입니다 인터 로프:

[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

[StructLayout( LayoutKind.Sequential )]
struct LASTINPUTINFO
{
    public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));

    [MarshalAs(UnmanagedType.U4)]
    public int cbSize;    
    [MarshalAs(UnmanagedType.U4)]
    public UInt32 dwTime;
}

편집하다: 어, 당신은 어떤 언어를 사용하고 있는지에 대해 지정하지 않았습니다. System.Diagonstics.Process

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top