Exécuter toutes les commandes dos et autres facilement et sans problèmes

Soyez le premier à donner votre avis sur cette source.

Vue 63 684 fois - Téléchargée 3 236 fois

Description

Je poste cette source en réponse à des questions posées sur le forum

Utiliser les commandes Dos sans problèmes avec ShellExecute de l'unité ShellApi
et l'interpreteur de commande CMD.exe

Petites explications:
Les Switches /c : Exécute la ligne de commande et referme l'interpréteur de Commande
/k : Exécute la ligne de commande et attend que l'utilisateur referme
la fenêtre dos

Il y d'autres switchs pour cela allez dans l'aide de Windows et tapez CMD

Dans le TEdit vous pouvez lancer:
Une commande dos simple Ex: Dir c:*.*
Une application avec paramètres Ex: Notepad.exe Teste.txt
Plusieurs commandes mais il faut les mettre entre guillemets "" et
Séparer les commandes avec && Ex:
"Copy c:monfichier.txt E:Monfichier&&del c:Monfichier.txt"
Démarrer une application attendre qu'elle soit finie et en exécuter
une deuxième Ex:
"Start /wait %systemroot%System32calc.exe&&Dir c:*.*"

La même ligne de commande sous Dos donnerait ceci :
cmd.exe /k "start /wait %systemroot%System32calc.exe&&Dir c:*.*"

Et dans Delphi :
ShellExecute(Handle, Nil, 'CMD' ,
'/k "start /wait %systemroot%System32calc.exe&&Dir c:*.*"', Nil ,
SW_HIDE);

ATTENTION si vous Exécutez une ligne de commande avec comme switch /k et
avec l'option SW_HIDE dans ce cas la fenêtre est certes invisible mais elle
n'en est pas pour autant fermée et après une série de commande de ce type
vous aurez autant de Processus CMD Actif (ce qui à terme va saturer la mémoire).
C'est pour cette raison que j'ai mis dans la Procédure RadioButton1Click une boucle
qui vous évitera ce désagrément en forcent (si /k est sélectionné)
le mode SW_SHOWNORMAL

Dans vos applications si vous devez utiliser /k avec SW_HIDE,
je vous conseil donc d'ajouter '&&Exit' à votre ligne de commande
et de la mettre entre guillemets "" comme ceci :
"Dir c:*.*&&Exit"

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

merci de m'aider pour lancer un jeux PC.
exemple la commande "C:\Program Files (x86)\GameTop.com\Super Bikes\game.exe" fonctionne mais à partir de Delphi non
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
2 mars 2020

par contre quand j'ajoute:
Memo1.Lines.LoadFromFile('c:\ipconf.txt');// j'ai ajouté un timer de 3 sec avant cette action
Efface:=DeleteFile('c:\ipconf.txt');//efface est boolean
Label1.Caption:=BooltoStr(Efface);
le memo est ok mais ensuite je reçois un message 'fichier introuvable' pour l'effacer???
Strange!!!
Messages postés
249
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
2 mars 2020

Salut Cirec,
pour la réponse ShellExecute, ça marche !!! SUPER!!!
Je teste la 2ème solution asap maie je ne souhaite pas de fichiers liés donc :-(
Pas possible sans le fichier .bat??? Comment libérer le "lien" avec ipconfig après l'appel?
Encore merci!!!
PhilLu
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
pour le deuxième bug, tu crées un fichier nommé "IPConf.bat" à la racine de ton application et tu complètes comme suit:

@echo off
ipconfig.exe /all>c:\ipconf.txt
exit

et dans Delphi tu fais :
WinExec('IPConf.bat', SW_HIDE);
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
Salut,

essayes comme ceci:

var
aCmdLine: PChar;
begin
aCmdLine := PChar('/c "%systemroot%\System32\ipconfig.exe /all>c:\ipconf.txt"');
ShellExecute(Handle, nil, 'CMD', aCmdLine, nil, sw_hide);
end;
Afficher les 15 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.