내가 달성하고 싶은 기능은 키보드 입력, 마우스 움직임 또는 클릭 동작이 없을 때 프로그램을 호출하는 것입니다. 가장 먼저 떠오르는 것은 Hook HOOK을 사용하여 키보드나 마우스 동작을 얻고, 동작이 없으면 프로그램을 호출하는 것입니다. 시도해 본 결과 Hooking과 Hooking을 할 때 항상 문제가 발생한다는 것입니다.
나중에는 윈도우의 화면 보호기가 키보드와 마우스가 움직이지 않을 때 화면 보호기에 들어가는 줄 알았는데, 마음이 바뀌어서 키보드와 마우스가 움직이지 않으면 시스템이 그런 형태로 프로그램을 만들고 싶었습니다. 화면 보호기를 시작한 다음 시스템이 화면 보호기를 실행 중인지 감지하고 프로그램이 실행 중이면 호출됩니다. 이 방법은 화면 보호기를 중개자로 사용하고 키보드 및 마우스 움직임을 감지하는 작업을 화면 보호기에 맡깁니다. SystemParametersInfo는 화면 보호기 정보를 얻는 기능을 구현할 수 있습니다. 참조 코드는 다음과 같습니다.
'API 호출 및 공통 정의: Private 선언 함수 SystemParametersInfo _ Lib "user32" _ Alias "SystemParametersInfoA" _ (ByVal uiAction As Long, _ ByVal uiParam As Long, _ pvParam As Any, _ ByVal fWInIni As Long) As Boolean Private Const SPI_GETSCREENSAVEACTIVE 길이 = &H10 '화면 보호기 활성화 여부에 대한 상수Private Const SPI_GETSCREENSAVERRUNNING As Long = &H72 '화면 보호기 실행 여부에 대한 상수Private Sub Timer1_Timer() Dim bRunning As Boolean '화면 보호기 실행 여부에 대한 변수, 물론 전역 변수 SystemParametersInfo SPI_GETSCREENSAVERRUNNING을 정의할 수 있습니다. 0, b실행 중, 거짓 '호출 API, bRunning은 화면 보호기 실행 상태를 반환합니다. Debug.Print Time; "Screen saver running="; bRunning 'Demo: 화면 보호기 실행 여부에 대한 정보 인쇄 End Sub '또한 화면 보호기가 활성화되어 있는지 확인합니다. , 다음 방법을 사용할 수도 있습니다: SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0 , bActive, False 'bActive는 반환 값입니다(논리 유형).
하지만 WIN7에서 디버깅하는 데 여전히 문제가 있고 SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False가 표시되는 이유를 모르겠습니다.
bRunning 유형이 잘못되어 포기할 수 밖에 없습니다.
마지막으로, 마지막 해결책은 GetLastInputInfo 함수를 사용하여 시스템의 유휴 시간을 얻는 것입니다. 참조 코드는 다음과 같습니다.
옵션 ExplicitPrivate 선언 함수 GetLastInputInfo Lib "user32" (plii As LASTINPUTINFO) As BooleanPrivate 선언 함수 GetTickCount Lib "kernel32" () As LongPrivate 유형 LASTINPUTINFO cbSize As Long dwTime As LongEnd 유형 Private Sub Form_Load() Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer() Dim lii As LASTINPUTINFO lii.cbSize = Len(lii) If GetLastInputInfo(lii) Then If (GetTickCount - lii.dwTime) / 60000 >= 15 Then Call MsgBox("15분 동안 기계가 작동하지 않았기 때문에, if 3분 동안 응답이 없으면 시스템이 강제 종료됩니다.", vbYesNo + vbExclaim + vbDefaultButton2, "프롬프트") End If End IfEnd Sub
이상이 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.