Parametre de ShellExecute [Résolu]

armetiz 25 Messages postés lundi 8 août 2005Date d'inscription 6 juin 2007 Dernière intervention - 28 oct. 2005 à 13:56 - Dernière réponse : armetiz 25 Messages postés lundi 8 août 2005Date d'inscription 6 juin 2007 Dernière intervention
- 4 nov. 2005 à 13:43
J'essai d'utiliser la commade ShellExecute avec divers parametre... mais, a chaque fois, seul la fenetre MS-Dos s'ouvre, mais, aucune action n'est presente..

J'ai fouillé le forum dans tous les sens.. et, se que je trouve etrange, c'est que les commandes qui marche chez d'autre, ba.. marche pas chez moi :s

par exemple :
ShellExecute(0, nil, 'CMD', PChar('dir c:/ > c:/list.txt'), nil, SW_SHOWNORMAL);

Ca me lance la fenetre ms-dos, mais.. rien de plus derriere.. j'ai essaier dautre truc, mais rien de concluant..merci à vous si vous aviez un reponse.
Afficher la suite 

28 réponses

Répondre au sujet
Utilisateur anonyme - 28 oct. 2005 à 15:10
+1
Utile
Salut

Copier coller d'un topic précédent :

ShellExecute(0,nil,'C:\test.exe',nil,nil,SW_SHOW);

Le premier handle identifie le processus (l'application en gros) rattaché au lancement.
Si il y a fhune erreur, c'est ton application qui récupère les messages d'erreurs.
Si c'est Nil, alors c'est explorer (windows en gros) qui récupère tout.
Ce handle sert en colaboration avec le dernier paramètre


Le deuxième (nil) peut en effet être 'open' mais en france, ça revient à nil.
en fait ce sont les options qu'il y a dans le menu contextuel dans l'explorateur.
Ainsi, quand on clique sur un fichier .TXT ou a en premier 'ouvrir', 'imprimer', 'modifier'. Et c'est ça qu'il faut mettre.
Si il n'y a rien ou si le verbe (c'est comme ça qu'on dit) est incorrect, le systeme utilise celui par defaut.
Donc quand on met 'open', pour un fichier TXT, ça n'existe pas dans windows en français mais comme l'option par defaut et 'Ouvrir', ça marche quand même.


Le deuxième est le non du programme à lancer (avec son chemin d'accès si nécessaire).


Le troisième est le ou les paramètre(s). Si on veut placer un paramètre avec espace (comme des nom longs) il faut bien respecter la notation. Càd mettre entre guillemets comme 'mon fichier.txt /test' à trois paramètre mais '"mon fichier.txt" /test' en a que deux.


Le quatrième est bien le repertoire d'ouverture par défaut.


Et enfin le dernier prend les constantes suivantes (traduction du site MSDN par mes soins...):
SW_HIDE = 0
Cache la fenêtre et active l'autre fenêtre


SW_MAXIMIZE=3
Maximise la fenêtre spécifier


SW_MINIMIZE=6
Minimise la fenêtre spécifier et active la fenêtre suivante dans l'ordre Z.


SW_RESTORE=9
Active et affiche la fenêtre. Si la fenêtre est minimisée ou maximisée, Windows la restore dans sa taille et sa position original. Une application devrait specifier ces drapeaux en restorant une fenêtre minimisée.


SW_SHOW=5
Active la fenêtre et l'affiche dans sa position et dimension courante.


SW_SHOWMAXIMIZED=3
Active la fenêtre et l'affiche en la maximisant.


SW_SHOWMINIMIZED=2
Active la fenêtre et l'affiche en la minimisant.


SW_SHOWMINNOACTIVE=7
Affiche la Fenêtre en la minisant. La fenêtre active reste active.


SW_SHOWNA=8
Affiche la Fenêtre tel quel. La fenêtre active reste active.


SW_SHOWNOACTIVATE=4
Affiche la fenêtre dans la dernier position et taille connue. la fenêtre active reste acrive.


SW_SHOWNORMAL=1
Active et affiche la fenêtre. Si la fenêtre est maximisée ou minimisée, windows la restore dans sa position et taille original. Une application devrait specifier ces drapeaux en s'affichant pour la première fois.


SW_SHOWDEFAULT=10
Met l'état d'affichage de base sur SW_FLAG spécifié dans la structure STARTUPINFO passé par la fonction CreateProcess par le programme au démarrage de l'application. L'application devrait appeler ShowWindow avec ce drapeau pour definir l'état initial de la fenêtre principale.


Voilà tout les secrets de ShellExecute.

Message de barbichette

C'est la seconde fois que tu poses la meme question et je t'avais deja répondu, il me semble avec l'adresse du topic.

Bon coding
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 28 oct. 2005 à 18:06
+1
Utile
voilà la première exécute la commande dir et redirige le résultat vers le fichier Test.txt
rien n'est affiché à l'écran.
ShellExecute(Handle,nil,'cmd', '/k dir c:\*.* > c:\Test.txt',nil,sw_Hide);
La seconde ouvre l'interpréteur de commande CMD et exécute la commande dir et l'affiche
dans une fenêtre dos
ShellExecute(Handle,nil,'cmd', '/k dir c:\*.* ',nil,sw_Show);

pour en savoir plus sur les paramètres de CMD :
Cliquer sur le bureau puis presser F1 (ceci appel l'aide de Windows)
et taper CMD puis Enter

Tiens moi au courent
@+
Cirec

<HR color=#008000>


N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
armetiz 25 Messages postés lundi 8 août 2005Date d'inscription 6 juin 2007 Dernière intervention - 28 oct. 2005 à 15:54
0
Utile
Merci beaucoup de la reponse, cest fou, car j'ai essaier pleins de mot clé avec la fonction recherche du forum..m'enfin, tres bonne reponse, thx, j'vais essaier de me debrouiller avec.
Commenter la réponse de armetiz
armetiz 25 Messages postés lundi 8 août 2005Date d'inscription 6 juin 2007 Dernière intervention - 28 oct. 2005 à 16:08
0
Utile
pourquoi alors.. ca ne marche pas:
ShellExecute(0, nil, 'CMD', 'dir c:/ > c:/text.txt', nil, SW_SHOWNORMAL);

le premier. handle, c'est le flux d'erreur, c'est ca ? donc, j'en ai pas grand chose a faire en fait (je crois), donc, 0 convient ?

le deuxieme, d'apres se que tu dis, le mieux c'est de laisser l'option par defaut (qui doit etre open ou l'equivalent).

CMD, lancer bien l'emulateur ms-dos.

'dir c:/ > c:/text.txt'
là, j'ai essaier entre PChar (normalement, dans se cas, pas besoin.. si je devais mettre des variables dedans, PChar serai utile, c'est ca ?)

l'avant dernier nil, repertoire d'ouverture.. ici, pas d'importance ?

j'comprend pas la..
Commenter la réponse de armetiz
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 28 oct. 2005 à 16:30
0
Utile
Il semblerait que la commande dir. ne fonctionne plus par l'intermédiaire de ShellExecute

Mais tu peux contourner le problème .
1°)Crée un fichier .bat qui contient

dir c:\*.* > c:/list.txt

2°) l'appeler avec
ShellExecute(Handle, nil, 'c:\Test.bat', nil, nil, SW_HIDE );

Ps: tu peux faire la même chose avec Delphi sans passer par l'interpréteur de commande.
@+
Cirec
<HR color=#008000>







N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
Commenter la réponse de Cirec
armetiz 25 Messages postés lundi 8 août 2005Date d'inscription 6 juin 2007 Dernière intervention - 28 oct. 2005 à 16:34
0
Utile
erf, j'savais pas qu'on pouvait le faire directos avec delphi, j'vais me renseigner alors..
mais, le coups du fichier bat, je le savais, le pb, c'est que j'aimerai limité les fichiers gravitant autours de l'exe..

Puis, j'aurai besoin de ShellExecute pour me servir de xcacls pour modifier des ACL de dossier..
(on m'a dit qu'il etait possible de faire un dll et tout. mais bon, j'debut un peu, j'prefers comprendre se que je fais.

Merci beaucoup en tout cas.
Commenter la réponse de armetiz
armetiz 25 Messages postés lundi 8 août 2005Date d'inscription 6 juin 2007 Dernière intervention - 2 nov. 2005 à 09:56
0
Utile
terrible, ca marche impecable ! trop bien, j'te remercie grandement.
Commenter la réponse de armetiz
armetiz 25 Messages postés lundi 8 août 2005Date d'inscription 6 juin 2007 Dernière intervention - 2 nov. 2005 à 14:13
0
Utile
juste une derniere petite, toute petite chose (j'espere).
J'ai trois lignes a lancer dans se style, pour obtenir un truc du genre :

Date
Heure
List.. (dir)

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 !
Commenter la réponse de armetiz
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 3 nov. 2005 à 00:40
0
Utile
Bonjour Armitz


<DT>/c Exécute la commande spécifiée par la chaîne, puis s'arrête.
<DT>/k Exécute la commande spécifiée par la chaîne, puis continue. </DT>
Teste avec /c à la place de /k
mais je suis pas sur à 100%

ShellExecute(Handle,nil,'cmd', '/k dir c:\*.* > c:\Test.txt',nil,sw_Hide); ici le fichier Test.txt est écrasé

ShellExecute(Handle,nil,'cmd', '/k dir c:\*.* >></gras> c:\Test.txt',nil,sw_Hide); ici on ajoute à Test.txt
Commenter la réponse de Cirec
Utilisateur anonyme - 3 nov. 2005 à 19:54
0
Utile
Rien à voir :

va sur dos fait dir c:/ : ca beugue

va sur dos fait dir c :\ ca marche
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 3 nov. 2005 à 19:56
0
Utile
pas confondre / au lieu de \
Commenter la réponse de Utilisateur anonyme
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 3 nov. 2005 à 20:40
0
Utile
Bonjour Franky23012301

il faut tout lire avant de foncer dans le tas

ShellExecute(Handle,nil,'cmd', '/c
dir > :\Test.txt',nil,sw_Hide);
ShellExecute(Handle,nil,'cmd', '/k
dir > c:\Test.txt',nil,sw_Hide);

ça n'a rien à voir ici /c et /k)
sont des paramètres de CMD et non des lecteurs comme tu le croyais donc ça ne bug pas

@+
Cirec
Commenter la réponse de Cirec
Utilisateur anonyme - 4 nov. 2005 à 11:15
0
Utile
Justement j'ai raison : la commande dir fonctionne sous delphi j'ai fais le test. Rien à redire

Second preuve : armetiz a écrit ShellExecute(0, nil, 'CMD', 'dir c:/ > c:/text.txt', nil, SW_SHOWNORMAL);

tu as écrit ShellExecute(Handle,nil,'cmd', '/k dir c:\*.* ',nil,sw_Show);

Différence mon ami : dir c:/ et dir c:\.


Pour terminer CMD ne fonctionne pas toujours : command.com si. Préférable donc d'utiliser command.com que CMD





.Donc je te retourne ton ptit mot : il faut tout lire avant de foncer dans le tas. Sinon tu deviens une crepe sucette
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 4 nov. 2005 à 11:20
0
Utile
En plus si tu cherches un peu sur CS (mot clés : DOS) tu vera qu'il ya un autre moyen que d'utiliser Shellexecute

(et oui il y a une autre fonction)
Commenter la réponse de Utilisateur anonyme
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 4 nov. 2005 à 11:26
0
Utile
Justement j'ai raison : la commande dir fonctionne sous delphi j'ai fais le test. Rien à redire

Second preuve : armetiz a écrit ShellExecute(0, nil, 'CMD', 'dir c:/ > c:/text.txt', nil, SW_SHOWNORMAL);

tu as écrit ShellExecute(Handle,nil,'cmd', '/k dir c:\*.* ',nil,sw_Show);

Différence mon ami : dir c:/ et dir c:\.


Pour terminer CMD ne fonctionne pas toujours : command.com si. Préférable donc d'utiliser command.com que CMD





.Donc je te retourne ton ptit mot : il faut tout lire avant de foncer dans le tas. Sinon tu deviens une crepe sucette


Je vois que tu n'as toujours pas compris,
je ne parle pas d'un lecteur mais d'un paramètre


Ce qui revient à écrire en ligne de commande
cmd /c dir c:\*.*
ce qui n'a rien a voir avec dir c:/ quand tu lis ne t'arrêtes pas à (/c) mais continue et tu verras la suite qui est "Dir c:\*.*"

et pour infos Cmd marche beaucoup mieux (plus de fonctions) que command.com

.Donc je te retourne ton ptit mot : il faut tout lire avant de foncer dans le tas. Sinon tu deviens une crepe sucette :-)

compris cette fois
@+
Cirec
Commenter la réponse de Cirec
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 4 nov. 2005 à 11:29
0
Utile
En plus si tu cherches un peu sur CS (mot clés : DOS) tu vera qu'il ya un autre moyen que d'utiliser Shellexecute

(et oui il y a une autre fonction)

je connais bien le dos et shellExecute ceci est un exemple precis donné à une qestion précise de Armetiz
@=
Cirec
Commenter la réponse de Cirec
Commenter la réponse de Utilisateur anonyme
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 4 nov. 2005 à 11:35
0
Utile
pour en revenir à ton soucis Franky23012301
Armetiz avait éffectivement inverser / et \ dans son exemple mais ca ne change rien puisque
celle ci ShellExecute(0, nil, 'CMD', 'dir c:\ > c:\list.txt', nil, SW_SHOWNORMAL); ne foctionne pas
en revanche

ShellExecute(0, nil, 'CMD', '/c dir c:\ > c:\list.txt', nil, SW_SHOWNORMAL); fonctionne parfaitement
fait un essai et tu veras

@+
Cirec
Commenter la réponse de Cirec
Utilisateur anonyme - 4 nov. 2005 à 11:44
0
Utile
Serieux tu es bouché ou quoi ?? lol

cmd /c dir c:\*.* : je suis d'accord
Notre amis avait écrit cmd /c dir c:/ maintenant que c'est souligné tu comprend mieux ???????

Alors je te relance le truc

Lis bien : car j'avais été très très clair. Aucune ambiguité.

Et je te demanderai de ne pas etre agressif. Voir ton message privé.

Je travaille : donc je ne suis pas 24h/24 sur le web. Si je ne réponds pas immédiatement c'est que j'ai d'autres priorités et obligations que CS.

Si je me suis permis d'etre un peu dur avec celui qui a posé la question c'est pour 2 raisons :

*La première : il avait posé déja la question et avait déja obtenu une réponse. SImplement il avait délaissé le topic qu'il avait créé.

*Deuxièmement : La réponse que je lui ai fournit sur ce topic était clair et sans ambiguité.

*De plus si tu fais sous dos dir c:/ ca marche pas alors que dir c:\ si. Il aurait pu prendre la peine de vérifier.


Pour conclure la principale faute qu'il a fait était dans l'utilisation de dir c:/
Commenter la réponse de Utilisateur anonyme
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 4 nov. 2005 à 11:45
0
Utile
c'est du "basic" ca
c'est pour cela qu'elle est là la fonction ShellExecute



mais associé à cmd (vas voir l'aide de wondows et tape cmd) tu décuples les possibilités et tu peut comme avec command.com crée des fichiers non pas *.bat mais *.cmd qui sont des scriptes des suites de commandes à exécuter
tout comme un *.bat mais avec une panoplie de paramètres
qui sont très utiles Ex: démarrer une appli et attendre la fin de son exécution

pour résumer "Commande.com c'est la pré histoire et cmd c'est l'avenir" tout ce que tu peux faire avec Command.com tu peux le faire avec cmd mais en mieux

@+
Cirec
Commenter la réponse de Cirec

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.

Parametre de ShellExecute - page 2