정리

[Win32] GetLastInputInfo와 LASTINPUTINFO

저장소/VC++
Idle Time에 관련된 정보 수집 중에 정리.
사용자 입력이 일정 시간동안 없는 경우를 확인하고자 할 때 아래와 같이 확인할 수 있다.

사용되는 API는 다음과 같다.

[GetLastInputInfo]


함수의 원형은 아래와 같다.
BOOL GetLastInputInfo(      
    PLASTINPUTINFO plii
);

간단히 설명하자면 GetLastInputInfo API는 마지막 입력 이벤트의 시간을 반환한다.
여기서 입력 이벤트라 함은 keyboard/mouse 모두를 포함한 의미이다.
다른 입력장치가 있다면? 다른 입력장치 없어서 모르겠다. -_-;;;
아무튼 나머지 정보는 아래와 같다.
Minimum DLL Version : user32.dll
Header : Declared in winuser.h, include windows.h
Import Library : User32.lib
Minimum Operating System : Windows 2000

Return Value : 0이 아니면 성공, 0이면 실패
Parameters : PLASTINPUTINFO로 마지막 입력 이벤트 발생 시간을 얻는다.

자, 이제 파라미터인 LASTINPUTINFO에 대해 알아보자.
LASTINPUTINFO 구조체의 원형과 기타 정보는 아래와 같다.
typedef struct tagLASTINPUTINFO {
    UINT cbSize;
    DWORD dwTime;
} LASTINPUTINFO, *PLASTINPUTINFO;


Header : Declared in winuser.h, include windows.h
Minimum Operating System : Windows 2000

LASTINPUTINFO의 멤버에 대한 설명은 아래와 같다.
cbSize : 크기값, 크기는 sizeof(LASTINPUINFO)로 설정해야 한다.
dwTime : 마지막 입력 이벤트 발생 시간(Tick count)을 받는다. 초기값은 그냥 0으로 해준다.



뭐... 일단 재료는 준비됐고~
아주아주 간단하게 샘플을 끄적거려보자.

조건 : 5초 동안 입력 이벤트가 발생하지 않으면 시스템 비프음을 발생하고 종료한다.

int main()
{
   LASTINPUTINFO lastInput;
   lastInput.dwTime = 0;
   lastInput.cbSize = sizeof(LASTINPUTINFO);

   while(1)
   {
      if(GetLastInputInfo(&lastInput))   // 마지막 입력 이벤트 발생시간 획득
      {
         printf("Last Input Info time : %d\n", lastInput.dwTime);

         // 5초 동안 입력이 없을 경우
         if(GetTickCount() - lastInput.dwTime > 5000)
         {
             printf("\a");   // 비프음 발생
             break;
         }

         printf("\n");
         Sleep(1000);   // 1초 대기후 다시 확인
      }
   }

   return 0;
}


음... 재밌군 ㅋ


[참고]
MSDN  http://msdn.microsoft.com/en-us/library/ms646302(VS.85).aspx
데브피아