Bonjour et content de te parler
Ce n'est pas tout à fait ta demande, mais j'ai quelques codes dans ma besace qui permettent d'eteindre ou redémarrer un PC.
ATTENTION !!!!
Sauvegarde tout, car certains son
"EFFICACES" et rien ne se sauvegarde
Code : Tout sélectionner
; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=2328&highlight=
; Author: dige
; Date: 18. September 2003
; Erklärung:
; Wenn Windows vom Nutzer heruntergefahren wird oder der Nutzer sich
; abmeldet und dies nicht mit der Option FORCE geschieht, wird an alle
; laufenden Prozesse eine #WM_QUERYENDSESSION Message gesendet.
;
; Diese ist mit #True oder #False zu beantworten. Wird allerdings ein
; #False übergeben, wird der Shutdown Prozess komplett abgebrochen!
;
; Dies kann man verwenden um ein Programm rechtzeitig sauber zu beenden
; oder den Shutdown Prozess abzufangen...
Procedure.b TerminateProgram()
Shared Quit.b
; Wird bei Windows-Shutdown aufgerufen
If MessageRequester( "Windows Shutdown", "Windows wirklich beenden?", #MB_ICONEXCLAMATION | #MB_YESNO ) = 6
Quit.b = 1
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure WindowsCallback(WindowID, Message, wParam, lParam)
If Message = #WM_QUERYENDSESSION
ProcedureReturn TerminateProgram()
Else
ProcedureReturn #PB_ProcessPureBasicEvents
EndIf
EndProcedure
OpenWindow( 0,90,90,300,100, "Warte auf Windows Shutdown" ,#PB_Window_SystemMenu)
SetWindowCallback(@WindowsCallback())
Repeat
Event = WindowEvent()
Delay ( 100 )
Until Quit.b Or Event = #PB_Event_CloseWindow
Code de Yasoc :
Code : Tout sélectionner
Structure NEW_LUID_AND_ATTRIBUTES
pLuid.LUID
Attributes.l
EndStructure
Structure NEW_TOKEN_PRIVILEGES
PrivilegeCount.l
Privileges.NEW_LUID_AND_ATTRIBUTES[#ANYSIZE_ARRAY]
EndStructure
; -----------------------------------------------------------------------------------------------------
; Main shutdown/logoff procedure (you can use it directly with ExitWindowsEx_ () flags if you want)...
; -----------------------------------------------------------------------------------------------------
Procedure.b DitchWindows(flags)
Protected os.OSVERSIONINFO:os\dwOSVersionInfoSize=SizeOf(OSVERSIONINFO)
GetVersionEx_(os)
If os\dwPlatformId=#VER_PLATFORM_WIN32_NT
If OpenProcessToken_(GetCurrentProcess_(),#TOKEN_ADJUST_PRIVILEGES|#TOKEN_QUERY,@token)
If LookupPrivilegeValue_(#Null,"SeShutdownPrivilege",tkp.NEW_TOKEN_PRIVILEGES\Privileges[0]\pLuid)
tkp\PrivilegeCount=1
tkp\Privileges[0]\Attributes=#SE_PRIVILEGE_ENABLED
If AdjustTokenPrivileges_(token,#False,tkp,#Null,#Null,#Null)
If ExitWindowsEx_(flags,0)=0:ProcedureReturn 4:EndIf
Else:ProcedureReturn 3
EndIf
Else:ProcedureReturn 2
EndIf
Else:ProcedureReturn 1
EndIf
Else
If ExitWindowsEx_(flags,0)=0
ProcedureReturn 4
EndIf
EndIf
EndProcedure
; -----------------------------------------------------------------------------------------------------
; Convenience functions (force = 1 to ignore applications that don't want to shut down, 0 otherwise)
; -----------------------------------------------------------------------------------------------------
Procedure.b ShutDown(force=1)
If force:force=#EWX_FORCE:EndIf
DitchWindows(#EWX_LOGOFF|#EWX_SHUTDOWN|force)
EndProcedure
error=ShutDown()
Select error
Case 1:MessageRequester("Shutdown error","Failed to get access token for current process", #MB_ICONWARNING)
Case 2:MessageRequester ("Shutdown error", "Failed to get required security privilege", #MB_ICONWARNING)
Case 3:MessageRequester ("Shutdown error", "Failed to adjust required security privilege", #MB_ICONWARNING)
Case 4:MessageRequester ("Shutdown error", "ExitWindowsEx call failed", #MB_ICONWARNING)
EndSelect
Code de Ts-Soft:
Code : Tout sélectionner
Procedure EnableShutDown()
Privileges.TOKEN_PRIVILEGES
OpenProcessToken_(GetCurrentProcess_(), 40, @hToken)
Privileges\PrivilegeCount = 1
Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid)
AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0)
CloseHandle_(hToken)
EndProcedure
Procedure Shutdown(Flags.l)
EnableShutDown()
ExitWindowsEx_(Flags, 0)
EndProcedure
Code : Tout sélectionner
; Auteur : Julien
; Version de PB : 3.90
;
; Explication du programme :
; Arrêter, redémarrer ou fermer la session.
; Il n'y a que la procedure car sinon, l'ordinateur s'arrêterai à chaque compilation de ce code ;)
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
Voila pour le reste les copains vont surement passer
