Shoot down

guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006 - 16 févr. 2006 à 16:55
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 18 févr. 2006 à 21:35
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

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
16 févr. 2006 à 17:14
salut,

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

@+

jlen
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
16 févr. 2006 à 17:20
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;
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
16 févr. 2006 à 17:39
ok,mais qu'est ce que shellexecute? car [Erreur] Unit_shootdown.pas(30): Identificateur non déclaré : 'ShellExecute'
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
16 févr. 2006 à 17:53
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
16 févr. 2006 à 18:10
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
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
16 févr. 2006 à 19:43
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 !
0
Utilisateur anonyme
16 févr. 2006 à 22:19
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 ?
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
16 févr. 2006 à 23:40
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)
0
Utilisateur anonyme
16 févr. 2006 à 23:48
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
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
17 févr. 2006 à 00:27
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.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
17 févr. 2006 à 02:15
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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
17 févr. 2006 à 09:13
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
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
17 févr. 2006 à 09:23
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
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
17 févr. 2006 à 09:51
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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
17 févr. 2006 à 09:52
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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
17 févr. 2006 à 10:00
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
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
17 févr. 2006 à 22:43
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>
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
17 févr. 2006 à 22:54
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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
17 févr. 2006 à 23:01
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
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
18 févr. 2006 à 14:31
bande de barbar !!!!
0
Rejoignez-nous