J'ai mis, oula, bien 10 minutes à le faire

Ca sert à rien ou a peu de chose mais bon, ça peut servir

Vous trouverez l'exe sur mon site
Code : Tout sélectionner
Procedure ComputerShutDown(Param.l)
; Param = paramètre d'instinction de l'ordinateur
; 1 : quitter session
; 2 : arrêter
; 3 : redémarrer
#TOKEN_ADJUST_PRIVILEGES = 32
#TOKEN_QUERY = 8
#SE_PRIVILEGE_ENABLED = 2
#EWX_LOGOFF = 0
#EWX_SHUTDOWN = 1
#EWX_REBOOT = 2
#EWX_FORCE = 4
#EWX_POWEROFF = 8
Structure MyLUID
LowPart.l
HighPart.l
Attributes.l
EndStructure
Structure MyTOKEN
PrivilegeCount.l
LowPart.l
HighPart.l
Attributes.l
EndStructure
Protected hdlTokenHandle.l, tmpLuid.MyLUID, tkp.MyTOKEN, tkpNewButIgnored.MyTOKEN, lBufferNeeded.l
OpenProcessToken_(GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hdlTokenHandle)
SysName.s = "" + Chr(0)
Name.s = "SeShutdownPrivilege" + Chr(0)
LookupPrivilegeValue_(SysName, Name, @tmpLuid)
tmpLuid\Attributes = #SE_PRIVILEGE_ENABLED
tkp\PrivilegeCount = 1
tkp\LowPart = tmpLuid\LowPart
tkp\HighPart = tmpLuid\HighPart
tkp\Attributes = tmpLuid\Attributes
AdjustTokenPrivileges_(hdlTokenHandle, 0, @tkp, SizeOf(MyTOKEN), @tkpNewButIgnored, @lBufferNeeded)
Select Param
Case 1 : ExitWindowsEx_(#EWX_LOGOFF | #EWX_FORCE, 0)
Case 2 : ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_FORCE, 0)
Case 3 : ExitWindowsEx_(#EWX_REBOOT | #EWX_FORCE, 0)
EndSelect
EndProcedure
#TailleX = 210
#TailleY = 80
; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, #TailleX, #TailleY, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Arrêt") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
FontID = LoadFont(1, "Tahoma", 8, #PB_Font_Bold)
TextGadget(2, 5, 3, #TailleX - 10, 15, "Arrêt de l'ordinateur dans")
SetGadgetFont(2, FontID)
Taille = (#TailleX - 6) / 6
StringGadget(3, 3, 18, Taille, 20, "", #PB_String_Numeric)
TextGadget(#PB_Any, 3 + Taille, 20, Taille, 20, " h")
StringGadget(4, 3 + 2 * Taille, 18, Taille, 20, "", #PB_String_Numeric)
TextGadget(#PB_Any, 3 + 3 *Taille, 20, Taille, 20, " min")
StringGadget(5, 3 + 4 * Taille, 18, Taille, 20, "", #PB_String_Numeric)
TextGadget(#PB_Any, 3 + 5 * Taille, 20, Taille, 20, " s")
ButtonGadget(1, 3, 40, #TailleX - 6, 23, "Lancer")
SetGadgetFont(1, FontID)
Taille = (#TailleX - 6) / 2
ButtonGadget(6, 3, 40, Taille, 23, "Annuler")
SetGadgetFont(6, FontID)
HideGadget(6, 1)
ButtonGadget(7, 3 + Taille, 40, Taille, 23, "Pause")
SetGadgetFont(7, FontID)
HideGadget(7, 1)
CheckBoxGadget(8, 3, 65, #TailleX - 6, 15, "Rédémarrer l'ordinateur")
Type = 2
Repeat
Event = WaitWindowEvent()
If Event = #WM_TIMER
; Décompte
sec - 1
If sec < 0
Min - 1
sec = 59
If Min < 0
Heure - 1
Min = 59
If Heure < 0
ComputerShutDown(Type)
End
EndIf
SetGadgetText(3, Str(Heure)) ; Affichages des heures
EndIf
SetGadgetText(4, Str(Min)) ; Affichage des minutes
EndIf
; Affichage des secondes
SetGadgetText(5, Str(sec))
ElseIf Event = #PB_EventGadget
Select EventGadgetID() ; boutons, zone de texte, ...
Case 1 ; Lancer
Timer = SetTimer_(WindowID(), 0, 1000, 0)
HideGadget(1, 1)
HideGadget(6, 0)
HideGadget(7, 0)
Heure = Val(GetGadgetText(3))
Min = Val(GetGadgetText(4))
sec = Val(GetGadgetText(5))
Case 6 ; Annuler
Event = #PB_EventCloseWindow
Case 7 ; Pause
KillTimer_(WindowID(), 0)
Timer = 0
HideGadget(1, 0)
HideGadget(6, 1)
HideGadget(7, 1)
Case 8
If Type = 2
Type = 3
SetGadgetText(2, "Redémarrage de l'ordinateur dans")
SetGadgetText(8, "Fermer la session")
SetGadgetState(8, 0)
SetWindowTitle(0, "Redémarrage")
ElseIf Type = 3
Type = 1
SetGadgetText(2, "Fermer la session dans")
SetGadgetText(8, "Arrêter l'ordinateur")
SetGadgetState(8, 0)
SetWindowTitle(0, "Fin de session")
Else
Type = 2
SetGadgetText(2, "Arrêt de l'ordinateur dans")
SetGadgetText(8, "Rédémarrer l'ordinateur")
SetGadgetState(8, 0)
SetWindowTitle(0, "Arrêt")
EndIf
EndSelect
EndIf
Until Event = #PB_EventCloseWindow
If Timer
KillTimer_(WindowID(), 0)
EndIf
End