La fonction que je souhaite réaliser est d'appeler le programme lorsqu'il n'y a pas de saisie au clavier, de mouvement de la souris ou d'action de clic. La première chose qui vient à l'esprit est d'utiliser le hook HOOK pour obtenir les actions du clavier ou de la souris, et d'appeler le programme s'il n'y a aucune action. Le résultat de mes tentatives est qu'il y a toujours un problème lors de l'accrochage et de l'accrochage.
Plus tard, j'ai pensé que l'économiseur d'écran de Windows entre dans l'économiseur d'écran lorsque le clavier et la souris ne bougent pas, j'ai donc changé d'avis et j'ai voulu créer le programme sous cette forme lorsque le clavier et la souris ne bougent pas. entre dans l'économiseur d'écran, puis détecte si le système exécute l'économiseur d'écran, le programme est appelé s'il est en cours d'exécution. Cette méthode utilise l'économiseur d'écran comme intermédiaire et laisse le travail de détection des mouvements du clavier et de la souris à l'économiseur d'écran. SystemParametersInfo peut implémenter des fonctions pour obtenir des informations sur l'économiseur d'écran. Le code de référence est le suivant :
'Appels API et définitions communes : Private Declare Function SystemParametersInfo _ Lib "user32" _ Alias "SystemParametersInfoA" _ (ByVal uiAction As Long, _ ByVal uiParam As Long, _ pvParam As Any, _ ByVal fWIni As Long) As Boolean Private Const SPI_GETSCREENSAVEACTIVE As Long = &H10 'Constante pour savoir si l'économiseur d'écran est activéPrivate Const SPI_GETSCREENSAVERRUNNING As Long = &H72 'Constante pour savoir si l'économiseur d'écran est en cours d'exécutionPrivate Sub Timer1_Timer() Dim bRunning As Boolean 'Variable pour savoir si l'économiseur d'écran est en cours d'exécution, bien sûr, vous pouvez définir la variable globale SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bEn cours d'exécution, Faux 'Appelez l'API, bRunning renvoie l'état d'exécution de l'économiseur d'écran Debug.Print Time; "Screen saver running="; bRunning 'Demo : affiche les informations indiquant si l'économiseur d'écran est en cours d'exécution. End Sub 'De plus, pour vérifier si l'économiseur d'écran est activé. , vous pouvez également utiliser la méthode suivante : SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0 , bActive, False 'bActive est la valeur de retour (type logique)
Mais je ne sais pas pourquoi j'ai toujours des problèmes de débogage sous WIN7, demandant SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False
Le type bRunning est erroné et ne peut être abandonné.
Enfin, la solution finale consiste à utiliser la fonction GetLastInputInfo pour obtenir le temps d'inactivité du système. Le code de référence est le suivant :
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("Parce que la machine n'a pas fonctionné depuis 15 minutes, si 3 minutes S'il n'y a pas de réponse, le système sera forcé de s'arrêter", vbOuiNon + vbExclamation + vbDefaultButton2, "invite") End If End IfEnd Sub
Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.