appel à une commande dos dans un programme C

Le
Rim msedi
Salut,

Je vais appeler dans mon programme C une commande dos puisque j'ai
besoin de résultat de cet appel après dans mon programme.

Comment je fasse ?

Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
domi
Le #19824881
Rim msedi wrote:
Salut,

Je vais appeler dans mon programme C une commande dos puisque j'ai
besoin de résultat de cet appel après dans mon programme.

Comment je fasse ?




Quelle commande DOS ?
Il y a toujours une api qui fait la meme chose, car c'est pas très
propre d'appeler des commandes exterieures et parser le resultat..
Rim msedi
Le #19827511
On 24 juil, 17:43, domi
Rim msedi wrote:
> Salut,

> Je vais appeler dans mon programme C une commande dos puisque j'ai
> besoin de résultat de cet appel après dans mon programme.

> Comment je fasse ?

Quelle commande DOS ?
Il y a toujours une api qui fait la meme chose, car c'est pas très
propre d'appeler des commandes exterieures et parser le resultat..



Salut,

Il y a programme X qui est exécuté par ligne des commandes. J'ai
besoin de résultat de ce programme X.

Je vais lancer dans mon programme C cette ligne de commande pour
utiliser dans la suite son résultat.

- Est ce que je peux utiliser la fonction system() pour lancer cette
commande dans mon programme ?
- Si oui comment ? sinon il y a autre solution ?


Merci.
Bertrand Lenoir-Welter
Le #19832021
> Il y a programme X qui est exécuté par ligne des commandes. J'ai
besoin de résultat de ce programme X.



CreateProcess() lance un programme Windows ou DOS. Une boucle intégrant
WaitForSingleObject() permet d'attendre qu'il se termine (ne pas oublier
de pomper les messages dans la boucle, notamment WM_PAINT). Enfin,
GetExitCodeProcess() te donne le code de sortie de ton programme.
Rim msedi
Le #19832381
On 26 juil, 08:44, Bertrand Lenoir-Welter <bertrand-dot-2008-at-galaad-
dot-net> wrote:
> Il y a programme X qui est exécuté par ligne des commandes. J'ai
> besoin de résultat de ce programme X.

CreateProcess() lance un programme Windows ou DOS. Une boucle intégrant
WaitForSingleObject() permet d'attendre qu'il se termine (ne pas oublier
de pomper les messages dans la boucle, notamment WM_PAINT). Enfin,
GetExitCodeProcess() te donne le code de sortie de ton programme.



Salut,

Je veux appeler à partir de mon programme X en C un autre programme Y
qui est exécuté par ligne des commandes.
Après l'appel de programme Y , j'ai obtiens un fichier texte qui est
le résultat de programme Y.
Je vais utiliser ce fichier dans mon programme X.
Je ne suis pas intéressée par le code de programme Y.

- Je peux utiliser la fonction system("ligne des commandes"); ?


- Pouvez vous me donner un exemple C d'utilisation CreateProcess() où
vous appelez un programme par ligne des commandes ?

Merci.
Bertrand Lenoir-Welter
Le #19833291
> Je veux appeler à partir de mon programme X en C un autre programme Y
qui est exécuté par ligne des commandes.
Après l'appel de programme Y , j'ai obtiens un fichier texte qui est
le résultat de programme Y.
Je vais utiliser ce fichier dans mon programme X.



Dans ce cas, il suffit d'exécuter le programme Y et ensuite récupérer
les données du fichier. Pour cette récupération, c'est à toi de jouer.
Pour lancer le programme Y et attendre qu'il ait fini de tourner :

PROCESS_INFORMATION pi;
STARTUPINFO si;
DWORD CmdFlags=0,
ExitCode;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
if(CreateProcess(0,"C:\MyDir\MyProgram.exe Arg1 Arg2
...",0,0,0,Flags,0,"C:\MyDir",&si,&pi))
{
while(WaitForSingleObject(pi.hProcess,100)==WAIT_TIMEOUT)
{
pMsgMom->GetApplication()->PumpWaitingMessages();
}
}
if(GetExitCodeProcess(pi.hProcess,&ExitCode))
{
...
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);


Pour lancer Y et l'oublier une fois lancé, on peut se passer de tout ce
qui suit l'appel à CreateProcess().

Si tu ne veux pas voir apparaître une fenêtre console pour le programme
Y, tu mets CmdFlags=CREATE_NO_WINDOW;


Regarde le help sur les fonctions CreateProcess(), WaitForSingleObject()
et GetExitCodeProcess() pour coller au plus près de tes besoins. J'ai
mis un timeout de 100 ms sur WaitForSingleObject() dans mon exemple,
mais tu peux avoir besoin d'une valeur plus petite ou plus grande.
Publicité
Poster une réponse
Anonyme