armetiz
Messages postés25Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention 6 juin 2007
-
28 oct. 2005 à 13:56
armetiz
Messages postés25Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention 6 juin 2007
-
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.
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.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 28 oct. 2005 à 18:06
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 !
armetiz
Messages postés25Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention 6 juin 2007 28 oct. 2005 à 15:54
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.
armetiz
Messages postés25Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention 6 juin 2007 28 oct. 2005 à 16:08
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..
Vous n’avez pas trouvé la réponse que vous recherchez ?
armetiz
Messages postés25Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention 6 juin 2007 28 oct. 2005 à 16:34
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.
armetiz
Messages postés25Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention 6 juin 2007 2 nov. 2005 à 14:13
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 !
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 3 nov. 2005 à 00:40
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
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 4 nov. 2005 à 11:26
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 :-)
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 4 nov. 2005 à 11:35
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
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 4 nov. 2005 à 11:45
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
je pense qu'il a fait un simple copier coller à partir de sa procédure.
Deuxièmement cmd ou command.com : oui cmd a plus de fonctionnalités. Mais tu ne peux pas lancer cmd sur tout les postes (j'ai déja eu ce problème) alors que command.com fonctionne toujours meme sous XP.