En fin je viens lire un bel article sur la CMD et toutes les commandes passées à la CMD, doivent l'etre ainsi. En tout cas ca fonctionne bien si on a qu'une ou deux commandes à passer. Dans le cas contraire ou plusieurs commandes sont nécessaires, l'emploit de d'un fichier avec extension BAT (Windows 98 et moins obligatoire) et CMD pour Win2k et plus. L'extension CMD est fortement recommandé. Si jamais par erreur vous tentiez d'exécuter un fichier.cmd sur Win98, ca ne fonctionnera pas.Pourquoi ? simplement qu'il y a de nouvelles commandes depuis la Win2k.
Et avec Api ShellExecute c'est nikel
m_ShellExecute("CMD","/c net start MonService") m_ShellExecute("CMD","/c net stop MonService")
* L'exécution de cette commande place la listes des services démarrés de windows dans un fichier m_ShellExecute("CMD","/c net start >c:\ListService.txt")
l'option /c est importante pour que CMD.EXE se ferme automatiquement si non on a des chances d'accumuler des processus CMD.EXE et finir par avoir un plantage du à un manque de mémoire
un autre point intéressant, on peut passer plusieurs commandes, il s'agit de les séparées par &&. Avec vfp il faut utiliser chr(38)+chr(38) si non on va avoir des commentaires non désiré.
* En gros je pourrais écrire
m_ShellExecute("CMD" ; , [/s/c pause ]; +Chr(38)+Chr(38)+[cd "C:\Program Files\Microsoft Visual FoxPro 9"]; +Chr(38)+Chr(38)+[dir *.* >c:\mvpdir.txt] ; +Chr(38)+Chr(38)+[pause]; +Chr(38)+Chr(38)+[cd "c:\"])
Et que font c'est commanedes une pause cd "C:\Program Files\Microsoft Visual FoxPro 9" place le Dir *.* dans c:\mvpdir.txt pause cd c:\
Les memes commandes dans un fichier.cmd donnerait Set Confirm Off Set Safety Off TEXT TO cmdTxt TEXTMERGE NOSHOW PAUSE cd "C:\Program Files\Microsoft Visual FoxPro 9" dir *.* >c:\mvpdir2.txt PAUSE cd c:\ EndText StrToFile(cmdTxt,"c:\fichier.CMD")
* Encore une fois l'emploit des ("") n'est utile que s'il y a des espaces dans la commande à passer * et nécessairement passer /s avec la commande du Shell
m_ShellExecute("c:\fichier.cmd","") && CMD a disparut, le shell par l'extension sait ce que sait m_ShellExecute("NotePad.exe","c:\mvpdir2.txt",1)
Des options utiles : /s autorise le double quotes dans les commande. Utile s'il y a des espaces dans un chemin cd "C:\Program Files\Microsoft Visual FoxPro 9" /c force la femeture de la tache après exécution des commandes /k maintient la tâche ouverte après exécution des commandes il faut passer la commande Exit pour fermer la tache si non avec le parametre SW_HIDE dans le ShellExecute va accumuler les CMDs comme tache de fond dans le TaskManager
Des liens http://www.ss64.com/nt/cmd.html http://www.zebulon.fr/dossiers/63-invite-de-commandes-cmd.html
voilà c'est tout
Procedure m_ShellExecute Lparameters lcFILE,lcChaine,lnSW lnSW = iif(Vartype(lnSW)=="N",lnSW,0) * lnSW = 0 --> sw_hide * lnSW = 1 --> sw_normal
Declare Integer ShellExecute In shell32.Dll ; Integer hndWin, ; STRING cAction, ; STRING cFileName, ; STRING cParams, ; STRING cDir, ; INTEGER nShowWin =ShellExecute(0,"Open",lcFILE,lcChaine,"",lnSW) Endproc
a+ Eddy
P.S. pis en plus on a pas de fenetre qui flash |