Einzelnen Beitrag anzeigen

Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Mit Handle Text Eigenschaft benutzen

  Alt 1. Apr 2004, 07:00
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;
Thomas
  Mit Zitat antworten Zitat