Fermer/redemarrer windows xp et autres

0/5 (10 avis)

Snippet vu 10 335 fois - Téléchargée 29 fois

Contenu du snippet

Voici une procedure permettant de fermer windows, elle fonctionne avec toutes les version de windows (je ne c pas pour NT et 2000, mais normalement oui)
Dans tous les cas, elle a été faite en premier lieu pour marcher avec XP !

Mettre bReboot a TRUE pour redemarrer sinon FALSE pour quitter

Source / Exemple :


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;

Conclusion :


J'ai trouvé cette procedure sur les newsgroup, elle me semble vraiment très utile :)

A voir également

Ajouter un commentaire Commentaires
cs_damrod Messages postés 7 Date d'inscription vendredi 12 mars 2004 Statut Membre Dernière intervention 8 octobre 2004
16 avril 2004 à 15:28
euh question bete pour faire fonctionner ca faut mettre quoi ds les uses???
jbsoulet Messages postés 23 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 10 novembre 2013
10 juil. 2003 à 20:47
Sous quelle version de Delphi ? c'est peut-être là la 1re question : personnellement, j'ai la version 3 de Delphi sous Windows XP. Pour l'instant ça ne marche pas. J'essaie d'analyser le code et de comprendre... Si j'arrive à quelque chose de positif je repasserai.
Salut.
cs_costello Messages postés 136 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 15 février 2006
27 juin 2003 à 23:15
on peut faire plus simple:
utiliser la DLL user.dll qui comporte la fonction ExitWindows
(comme quand on fait "rundll32.exe user,exitwindows")
cs_daniel Messages postés 3 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 26 mars 2002
26 mars 2002 à 09:00
Ca marche aussi sous NT4
cs_Gysmo Messages postés 209 Date d'inscription lundi 11 février 2002 Statut Membre Dernière intervention 13 décembre 2002
13 mars 2002 à 22:31
Et bien sous Windows 2000 Pro... ca marche nikel!
Afficher les 10 commentaires

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.