Hallo!
Ich möchte aus meinem Delphi-Programm heraus den Inhalt eines Textfeldes in einem fremden Programm auslesen und ändern!
Zum Auslesen mache ich im Moment folgendes:
procedure TForm1.Button1Click(Sender: TObject);
const
MAXTEXT = 10000;
var
WMGetText: TWMGetText;
hwndChild: HWND;
P: array[0..MAXTEXT] of char;
begin
hwndChild := GetWindow(FindWindow('Notepad',nil),GW\_CHILD);
if hwndChild = 0 then;
with WMGetText do
begin
Msg := WM\_GETTEXT;
TextMax := MAXTEXT;
Text := P;
end;
with TMessage(WMGetText) do
SendMessage(hwndChild,Msg,WParam,LParam);
memo1.text:=StrPas(P);
end;
Wobei dies mit „Notepad“ noch äusserst einfach ist und auch funktioniert!
Zum einfügen von Text nutze ich folgendes:
procedure TForm1.Button2Click(Sender: TObject);
var
wnd : HWND;
i : Integer;
s : string;
begin
wnd := FindWindow('notepad',nil);
if wnd 0 then begin
wnd := FindWindowEx(wnd,0,'Edit',nil);
s := 'ABC';
For i := 1 to Length(s) do
SendMessage(wnd, WM\_CHAR, Word(s[i]), 0);
end;
end;
Das klappt auch wunderbar mit Notepad!
Nun ist Notepad aber das einfachste Programm, was man sich vorstellen kann…
Ich würde das aber sehr gerne mit Outlook einmal machen!
Die Bezeichnung des Textfeldes einer Mail hole ich mir folgendermaßen:
procedure TForm1.Button3Click(Sender: TObject);
begin
MouseCapture := True;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
pt: TPoint;
hw: HWND;
s: String;
buf: array [0..255] of Char;
r: TRect;
intExitCode: integer;
i : Integer;
s1 : string;
text: pchar;
begin
MouseCapture := False;
GetCursorPos( pt );
hw := WindowFromPoint(pt);
If hw = 0 Then
Beep
Else Begin
GetClassname( hw, buf, 255 );
S:= StrPas(buf)+#13#10;
GetWindowRect( hw, r );
S := S + FOrmat('(%d,%d, %d, %d)',[r.left, r.top, r.right,
r.bottom])+#13#10;
SendMessage(hw, WM\_GETTEXT, 255, longint(@buf));
S := s + StrPas(buf);
SetForegroundWindow( handle );
memo2.Text:=S;
end;
end;
Mit den gewonnenen Informationen weiss ich aber leider nicht viel anzufangen! Wie kann ich nun aus eben diesem Textfeld, was ich mit der Maus ausspioniert habe den Text auslesen und ändern?
Danke!
Florian