ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

CMD avec ShellExecute   



L'auteur

eddymaue
Canada Canada
Membre Simple
# 0000000075
enregistré le 26/10/2004
Maue Eddy
j8j 8j8 Gatineau
de la société Formatek
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation

CMD avec ShellExecute
# 0000000701
ajouté le 03/06/2009 02:01:49 et modifié le 03/06/2009
consulté 5467 fois
Niveau débutant

Description

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

Commentaires
Aucun commentaire enregistré ...

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2018.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0