Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

appel à une commande dos dans un programme C

5 réponses
Avatar
Rim msedi
Salut,

Je vais appeler dans mon programme C une commande dos puisque j'ai
besoin de r=E9sultat de cet appel apr=E8s dans mon programme.

Comment je fasse ?

Merci.

5 réponses

Avatar
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..
Avatar
Rim msedi
On 24 juil, 17:43, domi wrote:
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.
Avatar
Bertrand Lenoir-Welter
> 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.
Avatar
Rim msedi
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.
Avatar
Bertrand Lenoir-Welter
> 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:MyDirMyProgram.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.