Frage zu GetWindowText



  • Hallo,
    wieso muss ich hwnd nochmal in hl speichern damit ich den Text des Fensters durch die Funktion GetWindowText bekomme?

    So gehts:

    #include <iostream>
    #include <windows>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
    HWND hwnd;
    HWND hl;
    
     LPTSTR lpString;
    
     string text;
    
    const int max_text_length = 100;
    
    hwnd = FindWindow(0,"Unbenannt - Editor");
    
    hl = hwnd;
    
     GetWindowText(
                            hl ,
                            lpString,
                            max_text_length
                          );
    
    cout<< lpString;
    
    return 0;
    
    }
    

    So geht es nicht:

    #include <iostream>
    #include <windows>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
    HWND hwnd;
    
     LPTSTR lpString;
    
     string text;
    
    const int max_text_length = 100;
    
    hwnd = FindWindow(0,"Unbenannt - Editor");
    
     GetWindowText(
                            hwnd ,
                            lpString,
                            max_text_length
                          );
    
    cout<< lpString;
    
    return 0;
    
    }
    


  • Sicher geht das. Dein Problem ist, daß lpString nicht auf einen gültigen Speicherbereich zeigt.



  • Und wie geht das ?

    Wie kann ich auf den Gültigen Speicherbereich zeigen?



  • initialisieren
    Guck mal nach was LPTSTR genau ist



  • get schrieb:

    Und wie geht das ?

    Wie kann ich auf den Gültigen Speicherbereich zeigen?

    TCHAR lpString[100]; //zum Beispiel



  • Ok jetzt funktionierts.

    Aber wieso zeigt hier lpString auf eine Gültige Speicheradresse ?
    Den so funktioniert es ja auch.

    #include <iostream> 
    #include <windows> 
    using namespace std; 
    
    int main(int argc, char* argv[]) 
    { 
    
    HWND hwnd; 
    HWND hl; 
    
     LPTSTR lpString; 
    
     string text; 
    
    const int max_text_length = 100; 
    
    hwnd = FindWindow(0,"Unbenannt - Editor"); 
    
    hl = hwnd; 
    
     GetWindowText( 
                            hl , 
                            lpString, 
                            max_text_length 
                          ); 
    
    cout<< lpString; 
    
    return 0; 
    
    }
    


  • Zufall



  • Zufall ?

    Gibt es da keine Technische erklärung für ?



  • get schrieb:

    Zufall ?

    Gibt es da keine Technische erklärung für ?

    Doch natürlich. Das Memory wo der Pointer zufällig draufzeigt wird beschrieben (durch GetWindowText) und danach von std::cout wieder gelesen.

    Das ist aber Undefined Behaviour und da kann ALLES passieren.
    Simon



  • Achso wenn GetWindowText aufgerufen wird dann verändern sich natürlich irgendwelche Register und Speicherstellen und da wird dann wohl zufällig mein Pointer mit beschrieben.

    Vielleicht sollte ich mir das mal mit meinem Olly Debugger anschauen.

    thx für die antworten.


Anmelden zum Antworten