Hi,
Text auslesen geht so:
Du schickst an das Control, von dem du das
Handle hast, per SendMessage
eine Nachricht WM_GETTEXT.
Dann liefert es dir den Text zurück.
Delphi-Quellcode:
function GetWinText{Version1}(Wnd: HWND): string;
var
TextLn: integer;
StrBuf: string;
begin
Result := '';
TextLn := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
if TextLn = 0 then Exit;
SetLength(StrBuf, TextLn+1);
try
SendMessage(Wnd, WM_GETTEXT, TextLn + 1, Integer(StrBuf));
Result := StrBuf;
finally
SetLength(StrBuf, 0);
end;
end;
function GetWinText{Version2}(Wnd: HWND): string;
var
TextLn: Integer;
StrBuf: PChar;
begin
Result := ''
TextLn := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
if TextLn = 0 then
Exit;
GetMem(StrBuf, TextLn + 1);
try
SendMessage(Wnd, WM_GETTEXT, TextLn + 1, Integer(StrBuf));
Result := StrBuf;
finally
FreeMem(StrBuf);
end;
end;
Beispiel: Text von Notepad auslesen und
in einem Memo anzeigen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
wnd: HWND;
begin
wnd := FindWindow('notepad', nil);
if wnd <> 0 then
begin
wnd := FindWindowEx(wnd, 0, 'Edit', nil);
Win32Check(wnd <> 0);
Memo1.Text := GetWinText(wnd);
end;
end;
Text setzen geht so:
Du schickst an das Control, von dem du das
Handle hast, per SendMessage
eine Nachricht WM_SETTEXT und gibst im 4. Parameter den
Text mit.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
wnd: THandle;
s: String;
begin
wnd := FindWindow('notepad', nil);
Win32Check(wnd <> 0);
wnd := FindWindowEx(wnd, 0, 'Edit', nil);
s := 'hallo'#13#10'notepad';
SendMessage(wnd, WM_SETTEXT, 0, LParam(PChar(s)));
end;