Uno22
Messages postés23Date d'inscriptionlundi 3 décembre 2007StatutMembreDernière intervention12 janvier 2008
-
9 janv. 2008 à 14:21
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
23 déc. 2008 à 15:10
Bonjour,
Je suis en train de faire un projet informatique pour mon école, et j'envoi des commandes netsh pour appliquer des adresses IP, passerelle ...
Le but est de faire une application de switcher de paramètres réseaux.
En fait j'arrive à appliquer mais je voudrais savoir comment on fait en C++ pour envoyer une commande en arrière plan, car pour la présentation, avoir une fenetre d'invite de commande DOS pendant 3 secondes environ devant le logiciel , s'est pas top
Si quelqu'un avait une idée pour envoyer ces commandes en second plan sans qu'une invite de commande se lance à l'ecran, se serait super sympa.
Merci d'avance.
Uno
A voir également:
'Mvn' n’est pas reconnu en tant que commande interne
Uno22
Messages postés23Date d'inscriptionlundi 3 décembre 2007StatutMembreDernière intervention12 janvier 2008 10 janv. 2008 à 13:49
Merci de ta réponse,
En fait j'utilise simplement la commande system pour envoyer et une fenetre s'affiche .
Voila une partie du code:
void CIpMaskGateWay::AppliqueIPWithGateway(string carte)
{
std::string str;
str="netsh interface ip set address name="" + carte + "" static " + Ip +" "+ Mask+" "+ GateWay + " 0";
size_t size = str.size() + 1;
char * buffer = new char[ size ];
strncpy( buffer, str.c_str(),size );
cout<<buffer<<endl;
system(buffer);
delete [] buffer;
}
Mais je voudrait que quand la commande system s'éxécute, la fenetre de commande DOS ne s'affiche pas à l'ecran.
Tout ce si se passe sur un PC en local
// Affichage du message et fin de l'appli
MessageBox(NULL, lpMessageBuffer, "ERROR", MB_OK | MB_ICONERROR);
ExitProcess(nLastError);
}
//
// Execute la commande spécifiée de manière cachée.
// Attend la fin de la commande si bWait est à TRUE.
// Renvoie FALSE en cas d'erreur.
//
BOOL ExecuteHidden(char* lpCommandLine, BOOL bWait)
{
STARTUPINFO startupInfo; // Info de démarrage du processus
PROCESS_INFORMATION processInfo; // Récupération d'infos sur le processu créé
BOOL res; // Renvoyé par CreateProcess
// Initialisation des infos de démarrage
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
res = CreateProcess(NULL, // On va se servir de lpCommandLine
lpCommandLine,
NULL, NULL, // Pas de sécu
FALSE, // Pas d'héritage des handles
0, // Pas de flags de création
NULL, // Même environement
NULL, // Même répertoire
&startupInfo,
&processInfo);
// Attente de la fin du processus si besoin
if (res && bWait)
WaitForSingleObject(processInfo.hProcess, INFINITE);
return res;
}
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char* lpCommandLine = "cmd /C "echo allo > olla.txt"";
if (! ExecuteHidden(lpCommandLine, TRUE)) ShowLastError();
return 0;
}
Dans ton cas, faudrait probablement l'appeler comme ça (Je crois pas que tu es besoin de faire une copie de str) :
ExecuteHidden(str.c_str(), TRUE));
Uno22
Messages postés23Date d'inscriptionlundi 3 décembre 2007StatutMembreDernière intervention12 janvier 2008 12 janv. 2008 à 18:14
Bonsoir,
je viens de voir que tu as repondu ,s'est super sympa
Je suis toujours à la recherche d'une solution si tu voulais expliciter un petit peu s'il te plait...
Sinon, quel est ton problème avec mon code ?
C'est une application Win32 complète (Sans MFC ni ATL).
Si elle fonctionne, un fichier olla.txt doit apparaître dans le répertoire courant.