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 ]
000
02.10.2002, 16:27 Uhr
void*
Generic Pointer
(Operator)


Hallo Uwe & Rest!

Du hattest doch mal auf diese Frage von mir, wie das geht, ein bisschen Code gebaut. Ich kann den leider nicht mehr finden, aber ich bin heute zufällig über einen einfachen Weg gestolpert wie es funktioniert. Falls Du das genauso gemacht hattest vergiss diesen Beitrag, ansonsten könnten das ganz interessant sein:

1. AllocConsole();
2. GetStdHandle();
3. WriteConsole();

MfG
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.10.2002, 21:26 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo void*,
ja, jedenfalls eleganter und schlanker als meine damalige Lösung. Aber wie terminiert man den Process ohne die lästige MessageBox? Mal ein möglicher Ansatz:

C++:
void CConsole::OnButton1()
{
#ifdef _DEBUG

    HANDLE con;
    
    AllocConsole();
    SetConsoleTitle("stdout");
    con= CreateFile("CON",GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,0,0,0);
    freopen("CON", "wt", stdout);
    SetConsoleTextAttribute(con, FOREGROUND_GREEN);
    
    
    std::cout <<"cout << stdout"<< std::endl;
    
    Sleep(2000);
    if(HWND hWnd =::FindWindow(NULL,(_T("stdout")))){
        ::SendMessage(hWnd, WM_CLOSE,0,0);
        ::SendMessage(hWnd, WM_DESTROY, 0, 0);
        ::SendMessage(hWnd, WM_NCDESTROY, 0, 0);
    }
#endif
}

Killed by Name schlägt bei mir auch fehl *grübel*
--
"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
002
09.10.2002, 10:55 Uhr
void*
Generic Pointer
(Operator)


Hallo, Uwe!

Ich werd' mal heute abend ein bisschen damit rumspielen. Falls sich was interessantes ergibt, poste ich es.
Ist jedenfalls eine schöne Debug-Hilfe ohne MessageBoxen.

MfG
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.10.2002, 22:01 Uhr
void*
Generic Pointer
(Operator)


Hallo!

Hier mal ein Bsp. (man verzeihe mir...mit BB5, habe hier kein VC++, sollte sich aber leicht umstricken lassen) zu meiner Variante:

in Klassendekl.:


C++:
//...
HANDLE stdout;
//...



Hier das cpp-File:


C++:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(!AllocConsole())
  {
    MessageBox(NULL, "Error: AllocConsole()", "Error", MB_ICONERROR);
    return;
  }
  if(INVALID_HANDLE_VALUE==(stdout=GetStdHandle(STD_OUTPUT_HANDLE)))
    MessageBox(NULL, "Error: GetStdHandle()", "Error", MB_ICONERROR);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if(!FreeConsole())
    MessageBox(NULL, "Error: FreeConsole()", "Error", MB_ICONERROR);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  DWORD written;
  if(!WriteConsole(stdout, Edit1->Text.c_str(), Edit1->Text.Length(), &written, 0))
    MessageBox(NULL, "Error: WriteConsole()", "Error", MB_ICONERROR);
}
//---------------------------------------------------------------------------



Gruß
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.10.2002, 22:06 Uhr
void*
Generic Pointer
(Operator)


Hallo, Uwe!

Anstatt

C++:
    if(HWND hWnd =::FindWindow(NULL,(_T("stdout")))){
        ::SendMessage(hWnd, WM_CLOSE,0,0);
        ::SendMessage(hWnd, WM_DESTROY, 0, 0);
        ::SendMessage(hWnd, WM_NCDESTROY, 0, 0);
    }



dies

C++:
FreeConsole();



löst auch hier das Problem, oder?!

MfG
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.10.2002, 11:26 Uhr
~Sven
Gast


Das funzt ja ziemlich gut, aber wie schaffe ich es, diesen Code nun in die Console einzubinden ????


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

       if( (chkdsk = _popen( "tracert -h 5 [url]www.bk2001.de[/url]", "rt" )) == NULL )
      exit( 1 );

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

Dieser Post wurde am 16.01.2007 um 17:22 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.10.2002, 11:35 Uhr
ektoplasma



Sorry, der Code ist wohl ein wenig durcheinander geraten. Hier der richtige Code:

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

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

--
wurde mit Code 1 (0x1) beendet
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.10.2002, 11:48 Uhr
void*
Generic Pointer
(Operator)


Hallo!

Bin mir nicht ganz sicher, was Du fragst...aber das hier hilft hoffentlich:


C++:
#include <windows.h>
#include <stdio.h>

int main(void)
{
  // Die Konsole herbeizaubern.
  AllocConsole();
  CreateFile("CON",GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,0,0,0);
  freopen("CON", "wt", stdout);

  // Wie gewohnt in die Konsole schreiben (hier könnte auch Dein Code stehen...)
  printf("Hier regiert der HSV!\n");

  // Die Konsole entsorgen.
  FreeConsole();
  return(0);
}



Gruß
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.10.2002, 12:06 Uhr
ektoplasma



Nein, es geht nicht darum, einfach TExt in der Console auszugeben, sondern um eine pipe zu öffnen also
Code:
_popen
Leider funtz das nicht wirklich und meine Frage ist nun, wie schaffe ich es, das dies in dieser Console läuft.
Der QuellCode oben, funktioniert in einer Consolenanwendung 100%!
Aber leider nicht in MFC, daher habe ich jetzt mit dem von euch geposteten Code eine Console erstellt, aber wie can ich jetzt meinen Programmteil darin ausführen???

Vielen Dank für die Mühe !
--
wurde mit Code 1 (0x1) beendet
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.10.2002, 10:03 Uhr
void*
Generic Pointer
(Operator)


Hallo!

Jetzt habe ich dich verstanden. Ich werd' mich heute abend mal ein bisschen daran versuchen. Falls es klappt melde ich mich wieder.

Gruß
void*
--
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: