Shoot down

Signaler
Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006
-
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
-
Bonjour a tous,
je voudrais que sur le click d'un bouton, le pc s'éteigne directement sans passer par la confirmation windows, commen faire?
guillaume

22 réponses

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

c'est avec InitiateSystemShutdown que tu éteins le pc vas voir la sourceiciqui te donnera la marche à suivre

@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
il y a aussi le code de rylryl:

if FileExists('c:\NTDETECT.COM') then
begin
ShellExecute(Form1.Handle,Nil,'C:\WINDOWS\SYSTEM32\TSSHUTDN.EXE','0 /DELAY:0 /POWERDOWN','',sw_hide);
close ;{XP}
end
else
ShellExecute(Form1.Handle,Nil,'C:\Windows\RunDll.exe','C:\Windows\System\User.exe,exitWindows','',sw_hide);
close; {9x}
end;
Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006

ok,mais qu'est ce que shellexecute? car [Erreur] Unit_shootdown.pas(30): Identificateur non déclaré : 'ShellExecute'
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut, declares ShellApi dans les uses . Bon je n'est pas tester car je n'ai pas envie d'éteindre mon PC pour l'instant!!



@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
il y a aussi un commande :

winexec(Pchar(WindowsRep()+'\system32\shutdown.exe -s -f -t 00'),SW_SHOWNORMAL);

qui fonctionne bien (je l'ai déjà utilisée)

@+

jlen
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
begin
if IsWinNT then SetPrivilegeNT;
ItWorked:= ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF , 0); // XP
if not ItWorked then
ShowMessage ('Shutdown impossible');
end;

et les 2 fonctions qui vont bien.

//--------------------------------------------------------
function IsWinNT : Boolean;
var MyOS: TOSVersionInfo;
begin
// Nécessaire de différencier Win NT des autres os
MyOS.dwOSVersionInfoSize := Sizeof(MyOS);
GetVersionEx(MyOS); result :(MyOS.dwPlatformId VER_PLATFORM_WIN32_NT);
end;

//--------------------------------------------------------
procedure SetPrivilegeNT;
var sTokenIn,sTokenOut : TTOKENPRIVILEGES ;
dwLen : DWORD ;
hCurrentProcess,hToken : THANDLE ;
Luid1 : TLargeInteger ;
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;
end;
end;

Et là, c'est blindé quelle que soit la version de zindos win 9x/2k/xp/etc etc (vista, je sais pas)

gnh !

DeltaFX,

J'en profite que tu parles cette fonction pour signaler une erreur qui est présente dans 95% des sources qui parles d'éteindre le PC :

Procedure TForm1.EteindrePC ;
begin
ExitWindowsEx(EWX_SHUTDOWN, 0);
end;
end.

Cela ne fonctionne pas (en tout cas pas sous XP).

Ce qui me permet de demander comment on peut poster de telles énormités sans prendre les précautions comme celles que tu viens de faire ?
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
Tu sais pô lire toi :D

j'ai tapé : ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF , 0)

Tiens, v'la ce que dit le MSDN (carrement + fiable....)
EWX_SHUTDOWN (0x00000001) :

Shuts down the system to a point at which it is safe to turn off the power. All
file buffers have been flushed to disk, and all running processes have stopped.
The calling process must have the SE_SHUTDOWN_NAME privilege. For more
information, see the following Remarks section.


Specifying this flag will not turn off the power even if the system supports
the power-off feature. You must specify EWX_POWEROFF to do this.

Windows XP SP1: If the system supports the power-off
feature, specifying this flag turns off the power.Et Vlan !

Quand au reboot , perso j'essaierai ca: ExitWindowsEx(EWX_REBOOT or EWX_FORCEIFHUNG, 0)

DeltaFX je ne dis pas cela sans raison : va voir les sites

http://phidels.com/php/index.php3 et la source de fabiin sur delphifr (serieux je ne sais meme pas comment on peut oser faire une telle source aussi bien au niveau du contenu que du contenant).

Maintenant DeltaFX reste zen, cela ne te visait pas c''était juste une précision : Fait sur google Eteindre PC et tu vas voir le nombre de fois ou tu vas voir sans la moindre précision et SANS RIEN D'AUTRE :

Procedure TForm1.EteindrePC ;
begin
ExitWindowsEx(EWX_SHUTDOWN, 0);
end;
end.

Et ca j'affirme que sous XP ca ne fonctionne pas
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
Oh je suis zen, je me sens pas visé.

Je comprend pas ta remarque par rapport à Phidels.com, il liste 2 méthodes (datées de 2000, XP était peu répandu.....),

Une non compatible NT : ExitWindowsEx(EWX_SHUTDOWN, 0), celle qui te mets en boule, et pourtant c'est clair c'est écrit "non compatible NT" or XP est un derivé de NT

Et une compatible NT,donc avec selection de l'OS, et EWX_SHUTDOWN {or EWX_FORCE} et malheureusement c'est resté en commentaire, le EWX_FORCE. ( et ca aurait du etre forceifhung, pour faire bien barbare).

Le principal truc a retenir, c'est dès qu'on voit un nom de commande où y a window dedans, faut systématiquement aller lire le MSDN, avant d'accorder la moindre confiance à un source.

Apres une lecture du MSDN, on rajoute "or EWX_PowerOFF" au cul de EWX_SHUTDOWN or EWX_FORCE, et hop.
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Salut,

@ Francky : le mieux dans ce cas c'est tester soit même et surtout avant d'affirmer quoi que ce soit.
Tu as beaucoup de chance je l'ai fait pour toi

alors voici ce que j'ai testé :

ExitWindowsEx(EWX_SHUTDOWN , 0); // et ça fonctionne très très bien sous XP SP2 avec les droits d'Administrateur
et :

ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE or EWX_POWEROFF , 0); // fonctionne également ( mais ça parait logique n'est il pas ?)

Et je précise aussi que, les deux versions coupent l'alimentation (Si le PC gère l'APM bien sur ). Un Shut Down propre quoi.

Donc on ne peut même pas faire confiance au MSDN

Un petit conseil qui ne mange pas de pain :
Ne pas prendre pour argent comptant tous ce que l'on peut lire ici et la sur le net où ailleurs
TESTEZ VOUS MÊME

Et vlan et hop und tchuss

@+
Cirec
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

MSND signifie: Microsoft Developer Network c'est la réfrence des systemes Windows

pour la source que tu cites si tu l'as regardée c'est la même chose que ce que te donne DeltaFx:

ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE or EWX_POWEROFF , 0);

il y a quand même une chose à vérifier est ce cette fonction laisse aux
autres programmes la possibilité de se fermer proprement ( closequery)
surtout dans la cas ou des modifications de données doivent
enregistrées?



@+

jlen
Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006

C'est vrai que ca peut etre dangereux, mais cela dépend comment on l'utilise! si l'on sait ce que fait cette appli,on prend des précautions, mais si on l'utilise en trompant un tiers, c'est différent!
J'ai tenu compte de vos remarques, et je suis arrivé a quelque chose, qui marche très bien, sur mon pc XP SP2, je n'ai pas de pc avec un autre os!
merci a tous
guillaume
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
Ce qui est chiant quand on développe, c'est cette foison de systemes zindoz 32-bits, faut soit penser à chaque system possible, soit restreindre les compatibilités. Rien que controler WindowMediaPlayer (pas Tmediaplayer ) c'est la mort, y a le 6.4.07, le 7.1, le 8.1, le 9, le 10.... chacun avec ses trucs et bizarrerie.

En fait c'est beaucoup plus marrant
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
j'ai testé il ferme bien les applis avec closequerry

mais pour XP ma fonction est plus simple (une seule ligne) encore qu'en
la remettant seule sur un form le compilateur ne retrouve pas la
fonction WindowsRep() il a fallu que je lui spécifie le chemin :

'c:\windows\system32\shutdown.exe -s -f -t 00'

là je n'est pas tout compris si vous avez une explication je suis preneur!



@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
autant pour moi, c'est un soft assez ancien et j'avais oublié que j'avais mis une fonction qui récupère le chemin de windows:

function WindowsRep():string;

var

WindowsDir : array[0..MAX_PATH] of Char;

nSize : DWord;

begin

nSize := SizeOf(WindowsDir);

GetWindowsDirectory(@WindowsDir, nSize);

result := WindowsDir;

end;



çà va plus très bien la tête Alzeimer me guette!!

@+

jlen
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
le but est d'appuyer sur un boutton pour arreter le pc sans passer par la confirmation ?

j'ai encore plus simple pour toi :

appuis sur le boutton "Power" de ta tour pendant 4 secondes ... ton pc s'etteindras sans corrompre le systeme.

<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
oui mais si tu n'as pas sauvegardé ton travail
ben ... c'est perdu
Et c'est pas windows qui coupe mais c'est le Bios du PC qui permet cela.
Donc pour le faire depuis une application Delphi
c'est maron
Snif

@+
Cirec
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
solution radicale en dernier ressort.... tu débranches le PC (il vaut
mieux avoir XP car avec 9X bonjour l'angoisse au redémarrage)



@+

jlen
Messages postés
113
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
16 avril 2006

bande de barbar !!!!