Lancement commande, dans le meme processus, avec shelle execute

Résolu
armetiz Messages postés 25 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 6 juin 2007 - 2 nov. 2005 à 14:54
ordromike Messages postés 6 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 5 mars 2010 - 5 mars 2010 à 11:03
Coucou, voila, suite aux réponses que j'ai obtenues sur le forum (grand merci), je suis tomber sur un petit pb..
J'ai trois lignes de Shell à taper, pour obtenir un truc du genre :

Date
Heure
List.. (dir)

Obtenu avec :
date > test.txt
time >> test.txt


dir c:/ >> test.txt

J'ai donc, fait les trois shellexecute a la suite, mais le pb, c'est qu'il se lance chaqu'un dans une fenetre differente..et, si le dernier se fait avant le premier, ca pose probleme.. car, le premier, efface le contenu precedent du fichier texte..

J'aurai voulu savoir s'il existait un parametre inconnu dans shellexecute, pour lancer dans le meme processus ? ou alors, attendre que la commande se termine pour lancer l'autre..

J'ai regader avec LanchAndWait, une fonction fait maison qui est un peu partout sur le forum, mais.. j'ai du mal a la comprendre malgré tout, et, je doute pouvoir faire se que je fais actuellement avec.
Voila, et encore merci !

6 réponses

bv94 Messages postés 40 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 16 décembre 2006 1
2 nov. 2005 à 19:45
var
si: TStartupInfo;
pi: TProcessInformation;
commande : string;
begin
commande := 'Ta_commande';
si.wShowWindow := SW_HIDE; // SW_SHOW pour la voir
si.lpReserved := nil ;
si.lpDesktop := nil ;
si.lpTitle := nil ;
si.dwFlags := STARTF_USESHOWWINDOW; //Obligatoire pour utiliser si.wShowWindow
si.cbReserved2 := 0 ;
si.lpReserved2 := nil ;
si.cb := SizeOf(si) ;

CreateProcess(nil, pchar(commande), nil, nil, False, CREATE_DEFAULT_ERROR_MODE, nil, ('c:'), si, pi);
WaitForSingleObject(Pi.hProcess,INFINITE); //Infinite peut être remplacé par une valeur en ms qui indique le timeout
end;

Et voila...

Bonne prog

BV94
3
armetiz Messages postés 25 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 6 juin 2007
2 nov. 2005 à 15:42
j'ai trouver un truc. mais, j'arrive pas a le faire fonctionner.


Utilisation de plusieurs commandes


Dans la chaîne, vous pouvez utiliser plusieurs commandes séparées par le séparateur && à condition de les placer entre guillemets
(par exemple, "commande&&commande&&commande").


mais.. je dois mal l'utiliser...
"dir c:/&&dir d:/"
comme dir n'est pas une commande interne je ne sais quoi.. ah marche pô :s
voila.. c'est con, j'vais retourner avec un vieux fichier bat placer dans le meme repertoire que mon appli...
0
bv94 Messages postés 40 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 16 décembre 2006 1
2 nov. 2005 à 19:06
Utilise la commande CreateProcess, elle te permet de recupere le handle de l'executable que tu lances, puis d'attendre avec la commande waitForSingleProcess que le processus soit terminé...
0
armetiz Messages postés 25 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 6 juin 2007
2 nov. 2005 à 19:24
j'vais continuer mes recherches alors.. car j'ai pas trouver d'info sur createprocess, j'avais deja chercher (j'lavais vu quelque part..) mais pas trouver de syntaxe (ou alors, que je comprennais lol).

Thx
0

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

Posez votre question
armetiz Messages postés 25 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 6 juin 2007
2 nov. 2005 à 19:49
thx :D je vera ca demain a tete reposer, grand merci aux gens du forum.. participation active de partout..c'est beau a voir*.
0
ordromike Messages postés 6 Date d'inscription jeudi 27 janvier 2005 Statut Membre Dernière intervention 5 mars 2010
5 mars 2010 à 11:03
Bonjour,

J'ai le même problème:
J'ai besoin de lancer plusieurs commandes shell mais chaque résultat d'une commande change les autres commandes.

Exemple, je fais un dir d'un répertoire, s'il y a des fichiers je fais un del et s'il y a rien, je fais un dir sur un autre répertoire.

Donc je peux pas lancer mes commandes à la suite les unes des autres.

Avec la fonction CreateProcess, je lance plusieurs cmd.exe et moi je voudrait avoir un seul cmd.exe et lui envoyer les commandes les une après les autres.

Est-ce possible ou pas ?
0
Rejoignez-nous