Executer une commande systeme

Signaler
Messages postés
47
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
9 juin 2004
-
Messages postés
32
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
24 août 2005
-
bonjour,
je voulais savoir si quelqu'un connait un moyen d'éxecuter des commandes su systemes d'exploitation sous Windows, et d'en récupérer l'output.
Il s'agirait donc d'imiter la fonction system() mais en renvoyant la sortie.

j'avais essayé en lançant un processus de l'interpréteur de commandes et puis, avec des "pipes", d'envoyer des commandes et de recevoir le résultat. Le problème était qu'un fenêtre de ligne de commande apparait alors que je voudrais que ce soit invisible.

Si quelqu'un a une idée... merci d'avance

anthrax

3 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
system("commande>fichier"); te permet de mettre le resultat dans lun fichier, mais ce n'est pas super
Messages postés
47
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
9 juin 2004

malin...
mais tu m'as donné une autre idée: pourrait-on décomposer la tâche en 2 programmes:
1) le programme 1 utilise system("commande | programme2.exe"); puis crée une "named pipe" et écoute.
2)le programme2 lit son "input" et l'écrit dans une "named pipe", ... que lit le premier programme

c'est un peu compliqué, mais ça évite de faire des fichiers temporaires; je m'en vais de ce pas voir si ça marche.

mais s'il y a encore des solution plus faciles n'hésitez pas!
Messages postés
32
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
24 août 2005

salut javai fait un peti program de la sorte pour afficher les resulta dun process dufférent du mien

DWORD fport()
{
LPTSTR lpCommandLine = "OpPorts.exe";
HANDLE hReadPipe, hWritePipe ;
HANDLE hErrReadPipe, hErrWritePipe;

DWORD dwStdOut;

DWORD dwRet;
DWORD res;

SECURITY_ATTRIBUTES sa;
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;

hReadPipe = NULL;
hWritePipe = NULL;
hErrReadPipe = NULL;
hErrWritePipe = NULL;
dwStdOut = 0;

CreatePipe(&hReadPipe, &hWritePipe, &sa, 8192);

ZeroMemory(&StartupInfo, sizeof(STARTUPINFO));

StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.dwFlags = STARTF_USESTDHANDLES;
StartupInfo.wShowWindow = SW_HIDE;
StartupInfo.hStdOutput = hWritePipe;

if (CreateProcess(
NULL,
lpCommandLine,
&sa,
NULL,
TRUE,
DETACHED_PROCESS,
NULL,
NULL,
&StartupInfo, &ProcessInfo))
{

while ( (dwRet = WaitForSingleObject(ProcessInfo.hProcess, 2000)) !=
WAIT_ABANDONED)
{
memset(bufStdOut, 0, sizeof(bufStdOut));

ReadFile(hReadPipe, bufStdOut, sizeof(bufStdOut) - 1, &dwStdOut,NULL);

if (dwRet == WAIT_OBJECT_0)
break;
}

GetExitCodeProcess(ProcessInfo.hProcess, &res);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
}
else
{

printf( "CreateProcess failed %s\n",lpCommandLine );

}

CloseHandle(hWritePipe);
CloseHandle(hReadPipe);
CloseHandle(hErrWritePipe);
CloseHandle(hErrReadPipe);

return 0;
}

je me rappel plus si ya des erreur
enfin cest basé sur un exemple de msdn...
a+