Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
Delphi 5 Professional
|
Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?
10. Feb 2005, 05:44
Dieses kleine Beispiel ermittelt mit Hilfe von EnumWindows alle TopLevel Fenster. Sollte das Fenster den Klassennamen "Notepad" haben, wird das Kindfenster "Edit" gesucht. Wurde es gefunden, wird es in die TList "List" eingetragen. Mit WM_GETTEXT wird dann der Inhalt von Notepad ausgelesen. StringReplace tauscht dann "###Hierhin###" durch "Neuer Text" aus. Und WM_SETTEXT sorgt dafür, das der bearbeitete Text wieder ins Notepad Fenster gelangt. Ich denke mal, als kleiner Einstieg reicht das und wird dir bestimmt weiterhelfen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
function EnumWindowsProc(Wnd: HWND; lParam: LPARAM): BOOL; stdcall;
var
ClassName: String;
EditHWnd: HWND;
begin
SetLength(ClassName, 512);
SetLength(ClassName, GetClassName(Wnd, PChar(ClassName), Length(ClassName)));
if ClassName = 'Notepad' then
begin
EditHWnd := FindWindowEx(Wnd, 0, 'Edit', nil);
if IsWindow(EditHWnd) then
TList(lParam).Add(Pointer(EditHWnd));
end;
Result := True;
end;
var
List: TList;
I: Integer;
S: String;
begin
List := TList.Create;
try
EnumWindows(@EnumWindowsProc, LPARAM(List));
for I := 0 to List.Count - 1 do
begin
SetLength(S, SendMessage(HWND(List.Items[I]), WM_GETTEXTLENGTH, 0, 0) + 1);
if Length(S) > 1 then
begin
SetLength(S, SendMessage(HWND(List.Items[I]), WM_GETTEXT, Length(S), LPARAM(PChar(S))));
S := StringReplace(S, '###Hierhin###', 'Neuer Text', [rfReplaceAll]);
SendMessage(HWND(List.Items[I]), WM_SETTEXT, Length(S), LPARAM(PChar(S)));
end;
end;
finally
List.Free;
end;
end;
Ciao, Sprint.
"I don't know what I am doing, but I am sure I am having fun!"
|
|
Zitat
|