Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Text an Cursorposition auslesen (global) (https://www.delphipraxis.net/119264-text-cursorposition-auslesen-global.html)

nezumi 23. Aug 2008 11:57


Text an Cursorposition auslesen (global)
 
Hallo zusammen,

für ein Übersetzungsprogramm möchte ich, dass bei drücken der mittleren Maustaste, der Text an der aktuellen Cursorposition ausgelesen wird.

Das soll natürlich bei einem Mausklick außerhalb meines Programms funktionieren (z.B. in Word Dokument, auf einer Internetseite usw)

Kann mir jemand einen Tipp geben wie ich da weiterkomme? (Ich hab bisher keinerlei Erfahrung, wie ich etwas außerhalb meines Programms machen kann)

Danke

Apollonius 23. Aug 2008 12:00

Re: Text an Cursorposition auslesen (global)
 
Falls es sich um ein Wincontrol handelt, ist es einfach: Du holst dir mit WindowFromPoint das Handle und liest mit WM_GETTEXT den Text aus. Falls es allerdings kein Wincontrol ist (z.B. bei den meisten Browsern), wird es äußerst schwierig.

nezumi 23. Aug 2008 12:16

Re: Text an Cursorposition auslesen (global)
 
Hallo Apollonius,

danke für die schnelle Antwort.

Dass es bei Browsern etc schwierig wird hatte ich mir schon gedacht. Daher war meine Idee, dass ich das mit Keybd_Event mache.

Also ich gehe mit
Delphi-Quellcode:
Keybd_Event(VK_LEFT,0,KEYEVENTF_KEYUP,0);
zurück bis zum Wortanfang und mit
Delphi-Quellcode:
Keybd_Event(VK_Shift,0,0,0);
Keybd_Event(VK_RIGHT,0,0,0);
Keybd_Event(VK_Shift,0,KEYEVENTF_KEYUP,0);
Keybd_Event(VK_RIGHT,0,KEYEVENTF_KEYUP,0);
markiere ich das Wort bis zu seinem Ende (halt noch mit Schleife und einer sinnvollen Abbruchbedingung, Leerzeichen oder so). Dann kann ich das Wort in die Zwischenablage kopieren und übersetzen.

Nur: wie löse ich diese Prozedur aus? Das soll ja immer passieren, wenn die mittlere Maustaste gedrückt wird.

helgew 23. Aug 2008 12:18

Re: Text an Cursorposition auslesen (global)
 
Ich hab gerade etwas im Forum herumgesucht und schlage einen anderen Ansatz vor: Mit GetDC(0) und BitBlt kannst du einen snapshot des aktuellen Desktops erzeugen ( bei mehreren Monitoren weiß ich nicht, ob das schief gehen kann ) und dann Texterkennung darauf loslassen, so funktioniert das auch in Flashobjekten, pdf-Ansichten und von graphischen Eingabefeldern.

Such mal nach "OCR", da findet man sowas:
http://www.delphipraxis.net/internal...ade76b7b30e962

nezumi 23. Aug 2008 12:34

Re: Text an Cursorposition auslesen (global)
 
Danke helgew,

das klingt interessant, ist mir aber echt zu schwierig. Ich kann gar nicht glauben, dass es nicht einfacher geht (aber vielleicht gehts ja tatsächlich nicht).

Vorläufig würde mir ja schon die Möglichkeit reichen, den Cursor in irgendeinem Text zu bewegen, unabhängig davon, in welcher Anwendung sich der Text befindet (word, wordpad, pdf). Der Rest ist dann glaub ich nicht mehr so schwer...

helgew 23. Aug 2008 12:41

Re: Text an Cursorposition auslesen (global)
 
Wenn man den Text markieren kann, kannst du ihn auch in die Zwischenablage kopieren lassen und dann hast du ihn ja ;)

nezumi 23. Aug 2008 12:46

Re: Text an Cursorposition auslesen (global)
 
Stimmt, mein Problem ist nur, dass nichts markiert ist.

Der Anwender klickt in einem Text auf ein Wort. Jetzt muss mein Programm ein paar Zeichen rechts und links des Cursors markieren und dann in die Zwischenablage kopiern.

Aber wie löse ich das aus? Es soll ja nicht zuerst auf einen Knopp meines Programms gedrückt werden, damit das passiert.

helgew 23. Aug 2008 15:24

Re: Text an Cursorposition auslesen (global)
 
Das Ablegen in die Zwischenablage obliegt dem Programm selbst, so wäre man um mögliche custrom draw Probleme herumgekommen, wie sie dir Acrobat Reader präsentieren wird ;) Da du aber offensichtlich ein eigenes Click-Event behandeln willst und nach Möglichkeit nicht nur das Fenster unter dem Cursor melken, weiß ich auch nicht weiter, wie es einfach gehen könnte


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz