IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[Win32] Redicrection de la sortie standard vers un handle


Sujet :

MFC

  1. #1
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut [Win32] Redicrection de la sortie standard vers un handle
    Bonjour � tous

    Je souhaite recuperer la sortie d'un programme (pscp.exe) que j'ai lanc� depuis mon application en utilisant l'api Createprocess.
    L'application est en visual basic mais je poste sur ce forum car la question concerne uniquement l'api win32.
    Quelqu'un sait il comment s'y prendre ? J'ai essay� d'utiliser le handle hStdOutput de la structure STARTUPINFO de mon process. Mais il vaut tout le temps -1.
    Comment associ� � ce handle la sortie standard ?

  2. #2
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut ,
    ta essaye de faire un
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); ?


  3. #3
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    Si je l'ai fait. En fait j'ai fait ceci
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    STARTUPINFO start;
    PROCESS_INFORMATION proc;
    ....
    start.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    start.dwFlags = STARTF_USESTDHANDLES;
    CreateProcess(0, sCommand, 0, 0, 1, NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, 0, 0, &start, &proc);
    // Le process se lance et se termine bien.
    // Maintenant je souhaite lire sa sortie en utlilsant start.hStdOutput
    ReadFile(start.hStdOutput, buffer, 1024, bytesreaded, 0);
     
    //J'ai toujours l'erreur handle invalide après cet appel

  4. #4
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    il y a de grandes chances que le thread � la sortie ferme le handle:
    voir doc MDSN :Multithreading: Terminating Threads
    donc essaye de faire un DuplicateHandle du handle avant.

  5. #5
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    C'est effectivement possible.
    J'essaierai �a demain. Juste une autre question, lorsqu'un handle est ferm� (par closehandle) sa valeur passe t elle � -1 ?

  6. #6
    R�dacteur
    Avatar de abelman
    Inscrit en
    F�vrier 2003
    Messages
    1 106
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 1 106
    Par d�faut
    Bon c'est bon j'ai trouv� .... hier � 1h du matin.
    Pour redirig� la sortie d'un processus fils cr�e avec CreateProcess vers un fichier, il suffit de

    1 - Creer le handle pour le fichier avec CreateFile, en sp�cifiant que le handle
    pourra �tre h�rit� par des process fils dans le param�tre SECURITY_ATTRIBUTES (bInherit � 1)
    2 - Renseigner les membres hStdOutput et hStdError avec la valeur du handle cr��es (je sais jamais l'orthographe de ce ..... mot) au 1
    3 - Renseigner le membre dwFlags de STARTUPINFO avec STARTF_USESTDHANDLES
    4 - Creer le processus avec CreateProcess
    5 - Attendre la fin du process
    6 - Lire la sortie du process avec Readfile en utilisant le handle du 1.
    7 - Fermer les handles

    J'aurais souait� transmettre au processus fils directement le handle de la sortie standard (qui est cr�e lors de l'appel � AllocConsole normalement) du processus appelant , mais bon j'y suis pas arriv�. Je met r�solu mais si quelqu'un a une id�e sur cette remarque, elle sera a bienvenue

    Bonnes f�tes � tous

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Redirection sortie standard vers widget text
    Par issoram dans le forum Interfaces Graphiques
    R�ponses: 3
    Dernier message: 23/01/2009, 17h57
  2. D�vier la sortie standard vers un fichier
    Par Amnesiak dans le forum Langage
    R�ponses: 2
    Dernier message: 10/04/2008, 08h32
  3. Rediriger une sortie standard vers le presse-papier du bureau
    Par Schmorgluck dans le forum Applications et environnements graphiques
    R�ponses: 5
    Dernier message: 13/04/2007, 23h15
  4. renvoyer la sortie standard vers un fichier
    Par batotoba dans le forum ANT
    R�ponses: 1
    Dernier message: 05/09/2006, 10h06
  5. rediriger la sortie standard vers un textarea
    Par gromite dans le forum Composants
    R�ponses: 9
    Dernier message: 10/05/2004, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo