AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Text in Eingabefeld beliebiger Anwendungen ersetzen?

Text in Eingabefeld beliebiger Anwendungen ersetzen?

Offene Frage von "FriFra"
Ein Thema von FriFra · begonnen am 9. Feb 2005 · letzter Beitrag vom 27. Dez 2005
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von toms
toms
(CodeLib-Manager)

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

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 11. Feb 2005, 09:37
Zitat:
"_WwG" (Word XP)
"TEditControl" (Delphi2005, Code)
"Internet Exploerer_Server" (IE)
Dort wird es mit WM_GETTEXT auch nicht funktionieren.
Da diese Controls die WM_GETTEXT nicht verarbeiten.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#12

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 11. Feb 2005, 09:40
@toms: Das war mir schon klar... nur wie komme ich nun an den Text dieser Controls?
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 11. Feb 2005, 09:41
Schaue mal im SDC. Dort hat's Beispiele dafuer.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#14

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 11. Feb 2005, 10:07
@toms: SDC??

Ich hab jetzt mal meinen Code etwas erweitert... jetzt blinken die betreffenden Controls (ausser beim IE, dort blinkt das gesamte Fenster und nicht nur das aktive Control) ... mehr bekomme ich im Moment damit allerdings nicht gebacken
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  AppHWnd: HWND;
  ThreadId: DWORD;
  FocusHWnd: HWND;
  ClassName: string;
  S0, S1: string;
  Rect: TRect;
  Canvas: TCanvas;
  Loop: integer;
begin
  Timer1.Enabled := False;
  FocusHWnd := GetFocus;
  if not IsWindow(FocusHWnd) then
  begin
    AppHWnd := GetForegroundWindow;
    if AppHWnd <> Self.Handle then
    begin
      ThreadId := GetWindowThreadProcessId(AppHWnd, nil);
      if ThreadId <> 0 then
        if AttachThreadInput(GetCurrentThreadId, ThreadId, True) then
        begin
          FocusHWnd := GetFocus;
          AttachThreadInput(GetCurrentThreadId, ThreadId, False);

          SetLength(ClassName, 512);
          SetLength(ClassName, GetClassName(FocusHWnd, PChar(ClassName),
            Length(ClassName)));

          SetLength(S0, SendMessage(FocusHWnd, WM_GETTEXTLENGTH, 0, 0) + 1);
          if Length(S0) > 1 then
          begin
            Application.ProcessMessages;
            SetLength(S0, SendMessage(FocusHWnd, WM_GETTEXT, Length(S0),
              LPARAM(PChar(S0))));
            S1 := StringReplace(S0, '###Hierhin###', 'Neuer Text',
              [rfReplaceAll]);
            if S0 <> S1 then
              SendMessage(FocusHWnd, WM_SETTEXT, Length(S1), LPARAM(PChar(S1)));
          end
          else
          begin
            //Get editor co-ordinates
            Windows.GetClientRect(FocusHWnd, Rect);
            //Change width/height to be right/bottom
            Rect.BottomRight := Point(Rect.Left + Rect.Right, Rect.Top +
              Rect.Bottom);
            //Turn client-relative co-ordinates into screen-relative co-ordinates
            Windows.ClientToScreen(FocusHWnd, Rect.TopLeft);
            Windows.ClientToScreen(FocusHWnd, Rect.BottomRight);
            //Set up canvas for whole desktop and flash the editor a few times
            Canvas := TCanvas.Create;
            try
              Canvas.Pen.Mode := pmNot;
              Canvas.Pen.Width := 5;
              Canvas.Handle := GetDC(HWnd_Desktop);
              try
                for Loop := 1 to 8 do
                begin
                  Canvas.Polyline([Rect.TopLeft, Point(Rect.Right, Rect.Top),
                    Rect.BottomRight, Point(Rect.Left, Rect.Bottom),
                      Rect.TopLeft]);
                  Sleep(100);
                end
              finally
                ReleaseDC(HWnd_Desktop, Canvas.Handle)
              end;
            finally
              Canvas.Free
            end;
          end;
        end;
    end;
  end;

  if (ListView1.Items.Count = 0) or (ListView1.Items[ListView1.Items.Count -
    1].Caption <> IntToStr(FocusHWnd) + '[' + ClassName + ']="' + Trim(S0) + '"')
      then
  begin
    ListView1.Items.BeginUpdate;
    ListView1.Items.Add;
    ListView1.Items[ListView1.Items.Count - 1].Caption := IntToStr(FocusHWnd) +
      '[' + ClassName + ']="' + Trim(S0) + '"';
    ListView1.Items[ListView1.Items.Count - 1].MakeVisible(False);
    ListView1.Items.EndUpdate;
  end;
  Timer1.Enabled := True;
end;
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

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

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 11. Feb 2005, 10:08
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
const
  S_SEARCH = '###Hierhin###';
  S_REPLACE = 'Neuer Text';
var
  AppHWnd: HWND;
  ThreadId: DWORD;
  FocusHWnd: HWND;
  ClsName: String;
  WndText: String;
begin

  AppHWnd := GetForegroundWindow;
  if IsWindow(AppHWnd) then
  begin
    if AppHWnd <> Self.Handle then
    begin
      ThreadId := GetWindowThreadProcessId(AppHWnd, nil);
      if ThreadId <> 0 then
        if AttachThreadInput(GetCurrentThreadId, ThreadId, True) then
        begin
          FocusHWnd := GetFocus;
          AttachThreadInput(GetCurrentThreadId, ThreadId, False);
        end;
    end else
      FocusHWnd := GetFocus;
    if IsWindow(FocusHWnd) then
    begin
      SetLength(ClsName, 512);
      SetLength(ClsName, GetClassName(FocusHWnd, PChar(ClsName), Length(ClsName)));
      SetLength(WndText, SendMessage(FocusHWnd, WM_GETTEXTLENGTH, 0, 0) + 1);
      SetLength(WndText, SendMessage(FocusHWnd, WM_GETTEXT, Length(WndText), LPARAM(PChar(WndText))));
      if Pos(S_SEARCH, WndText) > 0 then
      begin
        WndText := StringReplace(WndText, S_SEARCH, S_REPLACE, [rfReplaceAll]);
        SendMessage(FocusHWnd, WM_SETTEXT, Length(WndText), LPARAM(PChar(WndText)));
      end;
      with ListView1.Items.Add do
      begin
        Caption := '[' + ClsName + '] = "' + WndText + '"';
        MakeVisible(False);
      end;
    end;
  end;

end;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

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

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 11. Feb 2005, 10:10
Zitat von FriFra:
@toms: Das war mir schon klar... nur wie komme ich nun an den Text dieser Controls?
In deiner Signatur steht, das du Delphi Professional hast. Dann kannst du für Word die Komponente TWordApplication nehmen.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 11. Feb 2005, 10:16
Zitat:
@toms: SDC??
Bei Google suchensdc delphi
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#18

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 11. Feb 2005, 10:26
@Toms: Du meinst SwissDelphiCenter ? ... die Abkürzung war mir jetzt nicht geläufig

Zitat von Sprint:
In deiner Signatur steht, das du Delphi Professional hast. Dann kannst du für Word die Komponente TWordApplication nehmen.
Das hilft mir nicht weiter. Es soll ja bei JEDEM aktiven Eingabefeld funktionieren
Ich kann nicht für jedes nur denkbare Programm eine eigene Funktion basteln...

Das es geht, sieht man an diesem Programm: http://www.is.tuwien.ac.at/emu/
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

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

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 11. Feb 2005, 10:36
Zitat von FriFra:
Das hilft mir nicht weiter. Es soll ja bei JEDEM aktiven Eingabefeld funktionieren
Ich kann nicht für jedes nur denkbare Programm eine eigene Funktion basteln...
Das es geht, sieht man an diesem Programm: [EMU]
Das Programm arbeitet nach einem ganz anderen Prinzip.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#20

Re: Text in Eingabefeld beliebiger Anwendungen ersetzen?

  Alt 11. Feb 2005, 10:40
Zitat von Sprint:
Das Programm arbeitet nach einem ganz anderen Prinzip.
Nach welchem denn? Es ist auf jeden Fall in der Lage in beliebigen Textfeldern beliebiger Programme Texte zu erkennen und zu ersetzen - genau das suche ich doch.
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz