Die Funktion, die ich erreichen möchte, besteht darin, das Programm aufzurufen, wenn keine Tastatureingabe, Mausbewegung oder Klickaktion erfolgt. Das erste, was mir in den Sinn kommt, ist, den Hook HOOK zu verwenden, um Tastatur- oder Mausaktionen abzurufen und das Programm aufzurufen, wenn keine Aktion erfolgt. Das Ergebnis meiner Versuche ist, dass es beim Ein- und Aushaken immer ein Problem gibt.
Später dachte ich, dass der Bildschirmschoner von Windows aktiviert wird, wenn sich Tastatur und Maus nicht bewegen, also überlegte ich es mir anders und wollte das Programm so gestalten, dass sich das System nicht bewegt Ruft den Bildschirmschoner auf und erkennt dann, ob das System den Bildschirmschoner ausführt. Das Programm wird aufgerufen, wenn es ausgeführt wird. Diese Methode nutzt den Bildschirmschoner als Vermittler und überlässt die Erkennung von Tastatur- und Mausbewegungen dem Bildschirmschoner. SystemParametersInfo kann Funktionen implementieren, um Bildschirmschonerinformationen zu erhalten. Der Referenzcode lautet wie folgt:
'API-Aufrufe und allgemeine Definitionen: 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 As Long = &H10 'Konstante dafür, ob der Bildschirmschoner aktiviert istPrivate Const SPI_GETSCREENSAVERRUNNING As Long = &H72 'Konstante dafür, ob der Bildschirmschoner läuftPrivate Sub Timer1_Timer() Dim bRunning As Boolean 'Variable dafür, ob der Bildschirmschoner läuft, natürlich kann man die globale Variable SystemParametersInfo SPI_GETSCREENSAVERRUNNING definieren, 0, bRunning, False 'Call API, bRunning gibt den Bildschirmschoner-Laufstatus zurück. Debug.Print Time; , können Sie auch die folgende Methode verwenden: SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0 , bActive, False 'bActive ist der Rückgabewert (logischer Typ)
Aber ich weiß nicht, warum ich unter WIN7 immer noch Probleme beim Debuggen habe und SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False auffordere
Der bRunning-Typ ist falsch und kann nur aufgegeben werden.
Die endgültige Lösung besteht schließlich darin, die Funktion GetLastInputInfo zu verwenden, um die Leerlaufzeit des Systems zu ermitteln. Der Referenzcode lautet wie folgt:
Option ExplicitPrivate Declare Function GetLastInputInfo Lib „user32“ (plii As LASTINPUTINFO) As BooleanPrivate Declare Function GetTickCount Lib „kernel32“ () As LongPrivate Type LASTINPUTINFO cbSize As Long dwTime As LongEnd Type 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("Weil die Maschine 15 Minuten lang nicht in Betrieb war, if 3 Minuten Wenn keine Antwort erfolgt, wird das System zum Herunterfahren gezwungen“, vbYesNo + vbExclamation + vbDefaultButton2, „prompt“) End If End IfEnd SubDas Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er gefällt Ihnen allen.