Функция, которую я хочу достичь, - это вызвать программу, когда нет ввода с клавиатуры, движения мыши или щелчка мыши. Первое, что приходит на ум, — использовать перехватчик HOOK для получения действий клавиатуры или мыши и вызывать программу, если действий нет. Результат моих попыток таков: всегда возникает проблема при зацеплении и зацеплении.
Позже я подумал, что заставка винды входит в заставку, когда клавиатура и мышь не двигаются, поэтому передумал и захотел сделать программу в таком виде, когда клавиатура и мышь не двигаются, система. входит в заставку, а затем определяет, запущена ли в системе заставка, программа вызывается, если она запущена. Этот метод использует заставку в качестве посредника и оставляет работу по обнаружению движений клавиатуры и мыши заставке. SystemParametersInfo может реализовывать функции для получения информации о заставке. Справочный код выглядит следующим образом:
'Вызовы API и общие определения: Private Declare Function 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; "Экранная заставка работает ="; bRunning 'Демо: распечатать информацию о том, работает ли заставка. End Sub 'Кроме того, чтобы проверить, включена ли заставка. вы также можете использовать следующий метод: SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0, bActive, False 'bActive — возвращаемое значение (логический тип).
Но я не знаю, почему у меня до сих пор возникают проблемы с отладкой под WIN7, выдает SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False
Тип bRunning неверен, и от него можно только отказаться.
Наконец, окончательное решение — использовать функцию GetLastInputInfo для получения времени простоя системы. Справочный код выглядит следующим образом:
Option 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) Тогда If (GetTickCount - lii.dwTime) / 60000 >= 15 Тогда вызовите MsgBox("Потому что машина не работала 15 минут, если 3 минуты. Если ответа не будет, система будет вынуждена завершить работу", vb YesNo + vbExclamation + vbDefaultButton2, «приглашение») End If End IfEnd SubВыше приведено все содержание этой статьи, надеюсь, она вам всем понравится.