0/5 (10 avis)
Snippet vu 10 335 fois - Téléchargée 29 fois
procedure FermerWindows(bReboot: boolean); var sTokenIn,sTokenOut : TTOKENPRIVILEGES ; dwLen : DWORD ; hCurrentProcess,hToken : THANDLE ; Luid1 : TLargeInteger ; osVer: OSVERSIONINFO; begin try hCurrentProcess := GetCurrentProcess ; //ajuste les privilèges, c ce ki est necessaire pour windows XP OpenProcessToken (hCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken); LookupPrivilegeValue(nil,'SeShutdownPrivilege',Luid1) ; sTokenIn.PrivilegeCount := 1; sTokenIn.Privileges[0].Luid := Luid1; sTokenIn.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken,FALSE,sTokenIn,sizeof(TTOKENPRIVILEGES),sTokenOut,dwLen); CloseHandle (hToken); finally application.ProcessMessages; //redemarre if bReboot then ExitWindowsEx(EWX_REBOOT or EWX_FORCEIFHUNG, 0) else begin //arrêt osVer.dwOSVersionInfoSize := Sizeof(osVer); GetVersionEx(osVer); if osVer.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS //test pour la version de windows (9x ou XP) then ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCEIFHUNG , 0) else ExitWindowsEx(EWX_POWEROFF or EWX_FORCEIFHUNG , 0); end; end; end;
16 avril 2004 à 15:28
10 juil. 2003 à 20:47
Salut.
27 juin 2003 à 23:15
utiliser la DLL user.dll qui comporte la fonction ExitWindows
(comme quand on fait "rundll32.exe user,exitwindows")
26 mars 2002 à 09:00
13 mars 2002 à 22:31
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.