Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ VC++ / MFC » @uwe und wens interessiert: Konsole an Dialoganwendung anhängen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
12.10.2002, 20:32 Uhr
void*
Generic Pointer
(Operator)


Hallo, ektoplasma!

Ich denke so funzt es:


C++:
  HANDLE con;
  char psBuffer[128];
  FILE *chkdsk;

  AllocConsole();
  con= CreateFile("CON",GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,0,0,0);
  freopen("CON", "wt", stdout);
  if( (chkdsk = _popen( "tracert -h 5 10.10.10.1", "rt" )) == NULL )
    exit( 1 );

  while( !feof( chkdsk ) )
  {
     if( fgets( psBuffer, 128, chkdsk ) != NULL )
         printf( psBuffer );
  }
  printf( "\nProcess returned %d\n", _pclose( chkdsk ) );
  FreeConsole();



Gruß
void*
--
Gruß
void*

Dieser Post wurde am 12.10.2002 um 20:34 Uhr von void* editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
21.10.2002, 08:00 Uhr
ektoplasma



Leider funzt das so nicht!
Er springt mir mit dem ErrorCode 1 raus, nachdem ich die pipe öffnen will!!!
Aber warum? Wenn das bei dir funzt?
--
wurde mit Code 1 (0x1) beendet
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
21.10.2002, 10:30 Uhr
void*
Generic Pointer
(Operator)


Hallo!

Da klappt dann was beim Ausführen des Kommandos nicht, d.h. beim Öffnen der Pipe. Das hat dann aber wohl nichts mit dem allgemeinen Konstrukt zu tun, sondern mit dem tracert-Aufruf.
Versuch mal das gleiche mal mit System auszuführen und prüfe ob das klappt!
Falls nicht, versuch ich es nochmal.

Gruß
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
22.10.2002, 08:02 Uhr
ektoplasma



Was meinst du mit System ausführen ???
In einer Consolen Anwendung klappt das so zu 100% !!!
Nur leider nicht mit der von mir in MFC erstellten Console.
--
wurde mit Code 1 (0x1) beendet
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
22.10.2002, 09:49 Uhr
void*
Generic Pointer
(Operator)


Hallo, ektoplasma!

Ich schau mir das ganze heute abend noch mal an und schaue wo Stolpersteine sein könnten.

Bis dann
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
25.10.2002, 20:08 Uhr
void*
Generic Pointer
(Operator)


Hallo!

Das Problem:

Zitat:

MSDN:
Note The _popen function returns an invalid file handle, if used in a Windows program, that will cause the program to hang indefinitely. _popen works properly in a Console application. To create a Windows application that redirects input and output, read the section "Creating a Child Process with Redirected Input and Output" in the Win32 SDK.



Die Lösung:

C++:
void CPipeDlg::OnButton1()
{
  STARTUPINFO si;
  memset(&si, 0, sizeof(si));
  si.cb=sizeof(si);
  // Fenster nicht anzeigen
  si.dwFlags = STARTF_USESHOWWINDOW;
  si.wShowWindow = SW_HIDE;

  // pipe oeffnen
  SECURITY_ATTRIBUTES sa;  
  sa.nLength=sizeof(SECURITY_ATTRIBUTES);
  sa.bInheritHandle=TRUE;
  sa.lpSecurityDescriptor=NULL;
  HANDLE readPipe, writePipe;
  if(!CreatePipe(&readPipe, &writePipe, &sa, 0))
  {
    exit(1);
  }
  else
  {
     si.dwFlags|=STARTF_USESTDHANDLES;
    si.hStdOutput=writePipe;
    si.hStdInput=readPipe;
    si.hStdError=writePipe;
    PROCESS_INFORMATION pi;

    // prozess starten
    if(!CreateProcess(0, "tracert -h 5 [url]www.hsv.de[/url] ", 0, 0, TRUE, 0, 0, 0, &si, &pi ))
    {
      exit(2);
    }    
    else
    {
      WaitForSingleObject(pi.hProcess, INFINITE);
      CloseHandle (pi.hProcess);
      
      DWORD NumberOfBytesRead;
      char buffer[256];
      std::string output;
      while(ReadFile(readPipe, buffer, 255, &NumberOfBytesRead, 0))
      {
        buffer[NumberOfBytesRead]=0;
        output+=buffer;
        if(NumberOfBytesRead!=255)        
          break;
      }
      CloseHandle(writePipe);
      CloseHandle(readPipe);          
      MessageBox(output.c_str());
    }
  }  
}




Gruß
void*

edit by FloSoft: Bitte bei Urlangaben im cppcode die url-tags benutzen
--
Gruß
void*

Dieser Post wurde am 16.01.2007 um 17:22 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
27.11.2002, 15:53 Uhr
void*
Generic Pointer
(Operator)


Für Uwe... *hochschieb*

@Uwe: Hattest Du das mal gesehen?
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
28.11.2002, 20:29 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo void*,
gesehen schon, muss den Thread nochmals richtig durchgehen. Wäre ein Beitrag für die FAQ??
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
29.11.2002, 10:09 Uhr
void*
Generic Pointer
(Operator)


Hallo Uwe,

ja, ich denke auch. Wenn ich im März (seufz) wieder Zeit habe, schreibe ich mal ein Wrapper-Klasse dafür.
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ FAQ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: