Forum: Win32/Win64 API (native code)
Delphi
by Flocke,
9. Sep 2006
Du könntest dir die Länge vom letzten Abruf merken (WM_GETTEXTLENGTH) und nur dann den Text erneut abfragen, wenn sich die Länge geändert hat. Bringt vielleicht nicht viel, aber immerhin etwas.
Außerdem könntest du dir so jeweils nur die Änderungen geben lassen. Die folgende Funktion aktualisiert den Parameter oldlen jeweils so, dass beim nächsten Aufruf (mit derselben Variablen) nur der neu...
Forum: Win32/Win64 API (native code)
Delphi
by Flocke,
18. Aug 2006
Wenn du die Formatinformationen nicht brauchst, dann geht's auch noch recht einfach:
function GetForeignWindowText(wnd: HWND): string;
var
len: Integer;
begin
len := SendMessage(wnd, WM_GETTEXTLENGTH, 0, 0);
SetLength(Result, len);
SendMessage(wnd, WM_GETTEXT, len + 1, Integer(@Result));
end;
Forum: Win32/Win64 API (native code)
Delphi
by Flocke,
18. Aug 2006
Bei diesen Ansätzen hast du immer das Problem, dass die andere Anwendung einen anderen Adressraum hat als deine. Für EM_STREAMOUT brauchst du ein Callback, den Code dafür müsstest du irgendwie in den fremden Adressraum injezieren.
Vielleicht reicht dir ja ein Ansatz über die Zwischenablage. Deren alter Inhalt wird dabei allerdings zerstört. Außerdem funktioniert's nicht bei Texten > 65535...