SB_GETTEXT und SB_SETTEXT funktioniert nicht bei anderen Programmen



  • Hallo an alle.

    Ich habe folgendes Problem.
    Ich möchte gerne die einzelnen Panele der StatusBar eines anderen Programms auslesen
    bzw. ändern.
    (In der Statusleiste des anderen Programms befinden sich 6 Panele).

    Mit WM_GETTEXT und WM_SETTEXT funktioniert das auch, aber eben nur beim Titel eines Objekts
    bzw. dem Panel 0 der Statusleiste.

    Also benutze ich in meinem Code SB_GETTEXT und SB_SETTEXT.
    Lese ich nun die StatusBar in meinem eigenen Programm über die Handles aus, funktioniert alles
    Prima.
    Versuche ich das nun bei einem anderen Programm, bekomme ich immer nur wirre Zeichen
    ausgelesen.
    Um sicher zu gehen, dass ich auch wirklich das richtige Handle der Statusleiste des
    auszulesenden Programms erwischt habe, habe ich einfach versucht die Daten in dem jeweiligen
    Panel zu überschreiben.
    Der Inhalt des gewünschten Panels wird auch überschrieben, aber eben wieder nur mit wirren
    Zeichen.

    Was mache ich falsch?

    Hier mal der mir kopfzerbrechende "Kot": 😃

    void __fastcall TfrmMain::Button1Click(TObject *Sender)
    {
    HWND hwnd;
    HWND Child_hwnd;
    char Puffer[256];
    int Len;

    //Ermittelt das Outlook Window-Handle mit Hilfe der Class
    hwnd = FindWindow("Outlook Express Browser Class", NULL);
    if(hwnd != 0) //<- Wenn Window-Handle gefunden, hier weiter
    {
    //Prüft, ob ein ChildWindow mit dem Classennamen "msctls_statusbar32"
    //existiert.
    Child_hwnd = FindWindowEx(hwnd, NULL, "msctls_statusbar32", NULL);
    if(Child_hwnd != 0) //<- Wenn Window-Handle gefunden, hier weiter
    {
    SendMessage(Child_hwnd, SB_GETTEXT, 1, long(Puffer));

    frmMain->Memo1->Lines->Add(Puffer);
    }
    }
    }

    Kann mir jemand helfen? 😕

    Vielen Dank im Voraus für Eure Hilfe.

    MfG Andreas



  • Vermutlich das übliche Problem: die Stringzeiger des einen Prozesses sind im anderen Prozess nicht gültig.


Anmelden zum Antworten