Einzelnen Beitrag anzeigen

Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#3

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 10. Feb 2005, 04: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 = 'Notepadthen
    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!"
  Mit Zitat antworten Zitat