La función que quiero lograr es llamar al programa cuando no hay entrada de teclado, movimiento del mouse o acción de clic. Lo primero que me viene a la mente es usar el gancho HOOK para obtener acciones del teclado o del mouse y llamar al programa si no hay ninguna acción. El resultado de mis intentos es que siempre hay un problema al enganchar y enganchar.
Más tarde, pensé que el protector de pantalla de Windows entra en el protector de pantalla cuando el teclado y el mouse no se mueven, así que cambié de opinión y quise hacer el programa de tal manera que cuando el teclado y el mouse no se mueven, el sistema. ingresa al protector de pantalla y luego detecta si el sistema está ejecutando el protector de pantalla, se llama al programa si se está ejecutando. Este método utiliza el protector de pantalla como intermediario y deja al protector de pantalla la tarea de detectar los movimientos del teclado y el mouse. SystemParametersInfo puede implementar funciones para obtener información del protector de pantalla. El código de referencia es el siguiente:
'Llamadas API y definiciones comunes: Función de declaración privada SystemParametersInfo _ Lib "user32" _ Alias "SystemParametersInfoA" _ (ByVal uiAction As Long, _ ByVal uiParam As Long, _ pvParam As Any, _ ByVal fWInIni As Long) Como privado booleano Const SPI_GETSCREENSAVEACTIVE Mientras = &H10 'Constante para determinar si el protector de pantalla está habilitadoPrivate Const SPI_GETSCREENSAVERRUNNING As Long = &H72 'Constante para determinar si el protector de pantalla se está ejecutandoPrivate Sub Timer1_Timer() Dim bRunning As Boolean 'Variable para determinar si el protector de pantalla se está ejecutando, por supuesto, puede definir la variable global SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bEn ejecución, Falso 'Llame a la API, bRunning devuelve el estado de ejecución del protector de pantalla Debug.Print Time; "Protector de pantalla en ejecución="; bRunning 'Demo: imprime información sobre si el protector de pantalla se está ejecutando End Sub 'Además, para verificar si el protector de pantalla está habilitado , también puede utilizar el siguiente método: SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0 , bActive, False 'bActive es el valor de retorno (tipo lógico)
Pero no sé por qué sigo teniendo problemas para depurar en WIN7, lo que me indica SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False
El tipo bRunning es incorrecto y solo se puede abandonar.
Finalmente, la solución final es utilizar la función GetLastInputInfo para obtener el tiempo de inactividad del sistema. El código de referencia es el siguiente:
Opción ExplicitPrivate Declarar función GetLastInputInfo Lib "user32" (plii As LASTINPUTINFO) Como BooleanPrivate Declarar función GetTickCount Lib "kernel32" () Como LongPrivate Tipo LASTINPUTINFO cbSize As Long dwTime As LongEnd Tipo 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("Debido a que la máquina no ha funcionado durante 15 minutos, si 3 minutos Si no hay respuesta, el sistema se verá obligado a apagarse", vbSíNo + vbExclamación + vbDefaultButton2, "mensaje") End If End IfEnd SubLo anterior es el contenido completo de este artículo, espero que les guste a todos.