Text aus der Konsole auslesen, nur womit?



  • Hallo, habe zwar den Petzold vor mir liegen (Aufl.5) nur finde ich im Inhaltsverzeichnis nun nicht das Schlagwort um den Text aus der Konsole, also der cmd.exe bzw. command.exe zu kopieren bzw. auszulesen und in meinem Programm in einem Memo feld oder sonstiges zu kopieren bzw. auszugeben.
    Wie heißen die Funktionen dazu, dann kann ich das bestimmt schneller im Petzold oder im MSDN nachschlagen.
    Und wie kann ich erkennen ob sich grade die Eingabeaufforderung öffnet?

    Vielen Dank schonmal
    Gruß
    Thorsten



  • 😕 😕 😕
    was willst du bzw. suchst du? ne pipe vielleicht
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/base/pipes.asp
    willst du ne konsole zu debugzwecken?



  • ne, mein programm führt ein anderes programm aus, was wiederrum die konsole verwendet also dieses schwarze ms dos fensterchen, und dieses schließt sich dann anschließend. und da wollte ich nur den Text der da in der Konsole ausgegeben wird dann in meinem programm einfügen.



  • pipes, siehe link



  • ok danke, bleibt mir wohl im thema programmierung nichts übrig, als mir das auf englisch rein zu ziehen 😉 im buch von petzold steht zwar was von pipes, aber nicht im diesem sinne etwas auszulesen, schade eigentlich 😢





  • danke schonmal, habe es mir noch nicht durchgelesen, nur das was ich bisher über childs gelesen habe, weiß ich nicht ob ich das nun schon so verstanden habe. Nur ist das hier nicht sogedacht, das mein programm ein anderes fenster erzeugt, aus dem ich die eingabe übergeben kann?? weiß es echt nicht, müsste mich dann da wohl noch ein wenig erkundigen 😉

    gruß
    thorsten



  • ich hab mal versucht mit MS Spy++ eine Konsole auszuspionieren 😉

    "The specified window cannnot be spied upon. Windows will not allow access to the message stream for this window"

    mein Gedanke war per Get/SetMessage einfach den Textbuffer in der Konsole auszulesen - anscheinend funktioniert das nicht

    um z. B. die Titelleiste des MS Inet Expolorer auszulesen kann man diesen Code verwenden (hab ich hier mal im Forum gefunden)

    #include <iostream>
    using namespace std;
    #include <string>
    #include <windows.h>
    
    void GetURL(char *titel)
    {
    	//char * titel = "\1:blank - Microsoft Internet Explorer"; 
    
    	char buffer[1256]; 
    	HWND child; 
    	HWND ie; 
    	if(ie = ::FindWindow("IEFrame",titel)) 
    	{ 
    		if(child = ::FindWindowEx(ie,0,"WorkerW",0)) 
    		{ 
    			if(child = ::FindWindowEx(child,0,"ReBarWindow32",0)) 
    			{ 
    				if(child = ::FindWindowEx(child,0,"ComboBoxEx32",0)) 
    				{ 
    					::SendMessage(child,WM_GETTEXT,255,(long)&buffer[0]); 
    					char * tmp = &buffer[0]; 
    					//AfxMessageBox(tmp); 
    					cout<<tmp<<endl;
    				} 
    			}                        
    		} 
    	} 
    }
    
    //Quellcode 
    BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) 
    { 
        static char cbuff[256]="\0"; 
        static char strClass[200];
    
        static DWORD dwPID=0; 
    
        // get window class name 
        ::GetClassName(hwnd, strClass, 200); 
    
        // get pid 
        ::GetWindowThreadProcessId(hwnd, &dwPID); 
    
        // get caption 
        ::GetWindowText(hwnd, cbuff, sizeof(cbuff)); 
    
    	//cout<<cbuff<<endl;
    //    buff.Format("%s",cbuff); 
    
        // In buff stehen nun alle offnen Fenster drin 
        // Du musst nun einfach die Rausfiltern die MIE oder halt Opera 
        // Im Titel haben 
        // mit if und find arbeiten   
    
    	GetURL(cbuff);
    
        return true; 
    } 
    
    int main()
    {
    	// Der Aufruf der Callback Funktion 
    	EnumChildWindows(GetDesktopWindow(),EnumWindowsProc, NULL); 
    
    	system("pause");
    }
    

    wäre schon, wenn jemand eine möglichkeit findet das Konsolenfenster zu lesnen bzw. zu schreiben...


Anmelden zum Antworten