begin process at 2012 05 28 21:36:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

Envoyer une ligne de commande en arriere plan


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Envoyer une ligne de commande en arriere plan

mercredi 9 janvier 2008 à 14:21:22 | Envoyer une ligne de commande en arriere plan

Uno22

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
jeudi 10 janvier 2008 à 13:41:49 | Re : Envoyer une ligne de commande en arriere plan

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Heu... La fenêtre s'affiche sur des PC distant ou en local ?

Quel code utilises-tu ?

Si c'est en local, essais avec CreateProcess.
Cette fonction prend en entrée une structure STARTUPINFO.

Il faut que tu prépare cette structure :
ZeroMemory
Affectation du SizeOf dans cb
STARTF_USESHOWWINDOW dans dwFlags.
SW_HIDE dans wShowWindow


jeudi 10 janvier 2008 à 13:49:03 | Re : Envoyer une ligne de commande en arriere plan

Uno22

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

Voila si tu peut m'aider

Merci d'avance

Uno
jeudi 10 janvier 2008 à 15:29:49 | Re : Envoyer une ligne de commande en arriere plan

rt15

Membre Club Administrateur CodeS-SourceS
Heu bah en fait, j'avais l'impression de t'avoir filé les infos nécessaires.

Tu aurais donc pu écrire ça :
#include "windows.h"

//
// Affiche le message d'erreur associé la dernière erreur Win32 et ferme l'application.
//
void ShowLastError()
{
DWORD nLastError;
LPSTR lpMessageBuffer;

// Récupération du numéro de l'erreur
nLastError = GetLastError();

// Formatage du message
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, nLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMessageBuffer, 0, NULL);

// 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);

startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_HIDE;

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));
vendredi 11 janvier 2008 à 00:12:48 | Re : Envoyer une ligne de commande en arriere plan

Uno22

Bonsoir,

Je te remercie de ta réponse
J'ai essayé un petit de mettre en place ton application, mais jene suis pas arrivé à le mettre en oeuvre pour le moment

Encore merci

Tchao

Uno
samedi 12 janvier 2008 à 18:10:24 | Re : Envoyer une ligne de commande en arriere plan

jeffy131

C'est du grand n'importe quoi comme methode...
Il suffit d'utiliser les apis network.

samedi 12 janvier 2008 à 18:14:33 | Re : Envoyer une ligne de commande en arriere plan

Uno22

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...

Merci beaucoup d'avance

Uno
samedi 12 janvier 2008 à 23:41:07 | Re : Envoyer une ligne de commande en arriere plan

rt15

Membre Club Administrateur CodeS-SourceS
Ah vi, c'est vrai que ce serait mieux de se passer du DOS.

Pour changer des IP, y a par exemple WMI. Voilà quelques unes de ses possibilités sur le réseau.

Mais c'est assez chiant de s'en servir en CPP.

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.




mardi 23 décembre 2008 à 15:10:39 | Re : Envoyer une ligne de commande en arriere plan

rt15

Membre Club Administrateur CodeS-SourceS
Manque un LocalFree dans ma ShowLastError.


Cette discussion est classée dans : ligne, plan, commande, envoyer, arriere


Répondre à ce message

Sujets en rapport avec ce message

arriere plan(background) [ par cognac ] Avec dev4++. Comment changer la couleur de l'arriere plan (mode dos)?Merci Parametre sur la ligne de commande [ par payen ] Salut a tous,j'ai un petit souci en C++ ...alors voila : j'ai ecrit un code qui prend comme parametres sur la ligne de commande 2 entiers. Ensuite, pl control entre vers de C++ [ par bolix ] je recherche la ligne de commande qui puisse me faire appeler à partir du c++ des programme en asembleurs.je recherche aussi la ligne de commande pou Arguments en ligne de commande [ par Fantoooom ] Salut,Je débute dans le C++. J'ai lu dans un livre un truc à propos des arguments en ligne de commande, mais je ne sais pas du tout ce que c'est, quel ligne de commande [ par payen ] Salut a tous,j'au ecrit plusieurs programmes que je lance depuis la ligne de commande. j'aimerais pouvoir les appeller depuis n'importe quel dossier, application en arriere plan [ par flatmax ] salutje viens de faire une application (dos) et j'aimerais que cette appli tourne en arriere-plan, sans avoir besoin d'etre active.je m'explique, j'ai recuper les log dans un fichier [ par ben01n ] salut tout le monde je prog un client-serveur sous linux qui devrait envoyer le contenu d'un fichier log et je me galère gravepour ce qui est d'envoye Programme fonctionnant en arriere plan [ par bdkiller ] Bonjour, je cherche a faire un programme qui va fonctionner en arriere plan, cad je crée un controlleur de winamp, et j'utilise ceci comme code: (je s Recuperation des Parametres passés en ligne de commande [ par fortran ] Bonjour.Voila, dans un programme win32, j'essaye de recuperer le chemin, et nom de mon executable, ainsi que les parametres qui lui ont été passés en envoyer une commande à l'intérieure du programme sous forme de string [ par oudkaramla ] bonjour tout le monde j'ai un programme qui demande à l'utilisateur d'entrer une commande sur la fenêtre consolesauf que moi je veux le faire à l'inté


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales