Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Texte aus laufendem Fremd-Programm kopieren (https://www.delphipraxis.net/9321-texte-aus-laufendem-fremd-programm-kopieren.html)

eddy 23. Sep 2003 22:10


Texte aus laufendem Fremd-Programm kopieren
 
Hallo Leute,

ich möchte mir eine anspruchslose sich immer mal wiederholende Tätigkeit mit einem Mausclick erleichtern. Aus einer über das Internet anwählbaren Daten-Verwaltung (Fremd-Anwendung), die nicht mit TWebBrowser geöffnet werden kann, stehen in einem Memofeld Daten, die ich mit der Maus markiere, mit Ctrl-C kopiere und, nach einem Wechsel in mein Programm, mit Ctrl-V in ein Memofeld einfüge und weiter bearbeite.

Mit
Code:
procedure TFKasse.SpeedButton11Click(Sender: TObject);
var
   hdl, svhdl : DWORD;
begin
  s := 'Order Datenquelle';
  hdl := findwindow(nil,pchar(s));
  svhdl := GetForeGroundWindow;
  BringWindowToTop(hdl);
  SetActiveWindow(hdl);
  sleep(2000);
  BringWindowToTop(svhdl);
end;
kann ich in das entsprechende Fenster wechseln, bekomme es angezeigt und gelange in meine Anwendung zurück.

Anstatt "sleep" benötige ich jetzt noch eine Funktion, die mir das Markieren und Kopieren eines bestimmten Inhaltes aus 'Order Datenquelle' erlaubt in der Art wie mit TWebBrowser:
Code:
    WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_PROMPTUSER);
    WebBrowser1.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_PROMPTUSER);
mfg
eddy

Ganymed 24. Sep 2003 10:57

Re: Texte aus laufendem Fremd-Programm kopieren
 
Ein Gedankengang:

Versuch, ein Handle aud das Memo-Feld zu bekommen.
Selektier den Text des Memo-Feldes (z.B. Message senden, um den Inhalt zu selektieren. Mit WM_KEYDOWN und [strg]+[a] müsste es möglich sein, den gesamten Inhalt des Memos auszuwählen.)

Dann die Message WM_COPY an das Memo schicken und schon hast du's in der Zwischenablage.

Das Problem dürfte sein, ein Handle auf das Memo-Feld zu bekommen...

SirThornberry 24. Sep 2003 11:14

Re: Texte aus laufendem Fremd-Programm kopieren
 
Versuche ein Handle auf das Memo zu bekommen.
Danach mit Getwindowtext den Text von dort holen und dann
weiterverarbeiten...

Hab das ganze mal mit folgendem Beispiel probiert, sollte aber auch über anwendungen hinweg funktionieren brauchst ja nur statt memo1.handle das handle des memos aus dem anderen Fenster einsetzen.

Delphi-Quellcode:

[...]
var inhalt: Array[0..255] of Char;
begin
 GetWindowText(Memo1.handle, Inhalt, 255);
 Memo2.Text := String(Inhalt);
end;
Wenns probleme beim Handle holen gibt kannste das Programm wo das abzufragende Memo drin ist ja mal hergeben...

Chewie 24. Sep 2003 11:58

Re: Texte aus laufendem Fremd-Programm kopieren
 
Das geht so nicht :wink:
GetWindowText funktioniert nur innerhalb des eigenen Prozesses. Du brauchst Hier im Forum suchenWM_GETTEXT.

SirThornberry 24. Sep 2003 12:35

Re: Texte aus laufendem Fremd-Programm kopieren
 
Ist mir bisher noch gar nicht aufgefallen das es bei anderen prozessen nicht geht da bei Fenstern und so der Titel zurückgegeben wird. Dachte die "Texteigenschaft" enhält einfach keinen wert... My Horizont wurde erweitert *lol*.. Aber auf jeden Fall sollte mit text holen anhand des handles funktionieren...

eddy 24. Sep 2003 23:40

Re: Texte aus laufendem Fremd-Programm kopieren
 
Hallo Leute,

ich hab' mir die Beispiele angesehen. Leider habe ich kein Handle auf das Memo, ich besitze lediglich das Handle auf die Anwendung.

Wie erhalte ich Informationen zu den Komponenten, die Bestandteil der durch das Handle (hdl) bezeichneten Fremdanwendung sind?

mfg
eddy

APP 25. Sep 2003 05:44

Re: Texte aus laufendem Fremd-Programm kopieren
 
Hallo,
suche mal nach "EnumChildWindows" hier im Forum, und im Speziellen
Christians Antwort:
http://www.delphipraxis.net/internal...umchildwindows


Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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