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.