Page 1 sur 1
Connaitre le temps d'inactivité d'un PC (Résolu et merci !)
Publié : ven. 01/mars/2024 9:49
par brossden
Bonjour à tous
Est-il possible de connaitre le temps d'inactivité sur un PC, soit pas de déplacement de la souris, ni frappe sur le clavier.
Merci d'avance à ceux qui se pencheront sur ce problème !
Re: Connaitre le temps d'inactivité d'un PC
Publié : ven. 01/mars/2024 21:02
par boddhi
Salut,
Ce code pourra certainement t'aider.
D'avance, pardon à l'auteur, car je ne sais plus d'où provient le code.
Edit: L'auteur est Infratec (
post original ici)
Code : Tout sélectionner
CompilerIf #PB_Compiler_IsMainFile
EnableExplicit
CompilerEndIf
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
Procedure.i GetIdleTime()
Static LastTime.q
Static LastDwTime.l
Protected lii.LASTINPUTINFO
Protected Result.i
lii\cbSize = SizeOf(LASTINPUTINFO)
If GetLastInputInfo_(@lii)
If LastTime = 0
LastTime = Date()
EndIf
If LastDwTime = 0
LastDwTime = lii\dwTime
EndIf
;Debug "lii\dwTime: " + Str(lii\dwTime)
If lii\dwTime <> LastDwTime
LastDwTime = lii\dwTime
;Debug "LastDwTime: " + Str(LastDwTime)
LastTime = Date()
EndIf
Result = Date() - LastTime
EndIf
ProcedureReturn Result
EndProcedure
CompilerCase #PB_OS_Linux
Structure XScreenSaverInfo Align #PB_Structure_AlignC
window.i ; screen saver window
state.l ; ScreenSaver{Off,On,Disabled}
kind.l ; ScreenSaver{Blanked,Internal,External}
til_or_since.i ; milliseconds
idle.i ; milliseconds
eventMask.l ; events
EndStructure
Macro DefaultRootWindow(disp)
XDefaultRootWindow(disp)
EndMacro
ImportC "-lX11"
XOpenDisplay.i(display.p-utf8)
XCloseDisplay.i(*display)
XDefaultRootWindow.i(*display)
EndImport
ImportC "-lXss"
XScreenSaverQueryExtension.i(*dpy, *event_base_return, *error_base_return)
XScreenSaverQueryInfo(*dpy, drawable.i, *saver_info.XScreenSaverInfo)
EndImport
Procedure.i GetIdleTime()
Protected *display
Protected event_base.i, error_base.i
Protected info.XScreenSaverInfo
Protected Result.i
*display = XOpenDisplay("")
If *display
If XScreenSaverQueryExtension(*display, @event_base, @error_base)
If XScreenSaverQueryInfo(*display, DefaultRootWindow(*display), @info)
; Debug info\window
; Debug info\state
; Debug info\kind
; Debug info\til_or_since
; Debug info\idle
; Debug info\eventMask
Result = info\idle / 1000
EndIf
Else
Debug "Error: XScreenSaver Extension not present"
EndIf
XCloseDisplay(*display)
EndIf
ProcedureReturn Result
EndProcedure
CompilerCase #PB_OS_MacOS
#kCGAnyInputEventType = ~0
#hidSystemState = 1
ImportC ""
CGEventSourceSecondsSinceLastEventType.d(CGEventSourceStateID.l,CGEventType.l)
EndImport
Procedure.i GetIdleTime()
ProcedureReturn Int(CGEventSourceSecondsSinceLastEventType(#hidSystemState,#kCGAnyInputEventType))
EndProcedure
CompilerEndSelect
;-Demo
CompilerIf #PB_Compiler_IsMainFile
Define i.i
For i = 0 To 20
Debug GetIdleTime()
Delay(1000)
Next i
CompilerEndIf
Re: Connaitre le temps d'inactivité d'un PC
Publié : sam. 02/mars/2024 16:48
par brossden
Merci boddhi c'est exactement ce dont j'avais besoin !
Par contre comme je suis sous Windows une grande partie du code m'est inutile on peut largement simplifier !
Code : Tout sélectionner
Procedure.i GetIdleTime()
Static LastTime.q
Static LastDwTime.l
Protected lii.LASTINPUTINFO
Protected Result.i
lii\cbSize = SizeOf(LASTINPUTINFO)
If GetLastInputInfo_(@lii)
If LastTime = 0
LastTime = Date()
EndIf
If LastDwTime = 0
LastDwTime = lii\dwTime
EndIf
;Debug "lii\dwTime: " + Str(lii\dwTime)
If lii\dwTime <> LastDwTime
LastDwTime = lii\dwTime
;Debug "LastDwTime: " + Str(LastDwTime)
LastTime = Date()
EndIf
Result = Date() - LastTime
EndIf
ProcedureReturn Result
EndProcedure
;-Demo
CompilerIf #PB_Compiler_IsMainFile
Define i.i
For i = 0 To 20
Debug GetIdleTime()
Delay(1000)
Next i
CompilerEndIf
Re: Connaitre le temps d'inactivité d'un PC
Publié : dim. 03/mars/2024 15:28
par brossden
Voici la raison de ma demande ici
je veux que mon pC s'arrête si je ne me sers pas de la souris ni du clavier pendant environ 10 minutes mon PC doit s'éteindre tout seul !
Mon code est le suivant :
Code : Tout sélectionner
Procedure.i GetIdleTime()
Static LastTime.q
Static LastDwTime.l
Protected lii.LASTINPUTINFO
Protected Result.i
lii\cbSize = SizeOf(LASTINPUTINFO)
If GetLastInputInfo_(@lii)
If LastTime = 0
LastTime = Date()
EndIf
If LastDwTime = 0
LastDwTime = lii\dwTime
EndIf
If lii\dwTime <> LastDwTime
LastDwTime = lii\dwTime
LastTime = Date()
EndIf
Result = Date() - LastTime
EndIf
ProcedureReturn Result
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Define i.i
Repeat
x = GetIdleTime()
Debug x
If x>= 600 ; 10 x 60 = 600 secondes
RunProgram("cmd.exe", "/c shutdown /s /t 0 ","")
EndIf
Delay(1000)
ForEver
CompilerEndIf
J'ai modifié les options de shutdown qui ne fonctionne pas dans certains cas !
Re: Connaitre le temps d'inactivité d'un PC
Publié : lun. 04/mars/2024 23:12
par boddhi
Salut Brossden
Merci pour d'avoir partagé tes codes.

Re: Connaitre le temps d'inactivité d'un PC
Publié : mar. 05/mars/2024 11:50
par Ar-S
Très cool !
Re: Connaitre le temps d'inactivité d'un PC
Publié : mar. 05/mars/2024 14:40
par brossden
De rien Ar-s je vous dois bien cela à tous ici, vous êtes très efficaces pour moi !
J'ai modifié les options de shutdown qui ne fonctionne pas dans certains cas !