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 hinzugekommene Text zurückgegeben wird:
Delphi-Quellcode:
function GetNewForeignWindowText(wnd: HWND; var oldlen: Integer): string;
var
len: Integer;
buf: string;
begin
len := SendMessage(wnd, WM_GETTEXTLENGTH, 0, 0);
if len > oldlen then
begin
SetLength(buf, len);
SendMessage(wnd, WM_GETTEXT, len + 1, Integer(@buf[1]));
SetString(Result, @buf[oldlen + 1], len - oldlen);
oldlen := len;
end
else
Result := '';
end;