![]() |
Markiertes Wort übernehmen
Ich will folgendes machen.
Mein Programm reagiert via hooks.dll auf einen bestimmten Tastendruck. Nun möchte ich aber wenn ein Wort markiert ist dieses in meinem Programm übernehmen. Beispiel: User: Markiert Bei einem bestimmten Tastendruck soll in meinem Programm das Wort Markiert übernommen werden. Es soll wenn möglich aus jeder Anwendung übernommen werden. |
Re: Markiertes Wort übernehmen
Hoi
Du könntest das über die Zwischenablage machen, indem Du Ctrl+C simulierst. Doch Du musst dir überlegen, wie Du die Daten, die sich in der Zwischenablage befanden, erhalten kannst... Gruss Shaman |
Re: Markiertes Wort übernehmen
Ist das nicht einwenig aufwendig?????
Es müßte doch erheblich einfacher gehen. Denn ich könnte ja mit der hooks auch Tastatureingaben abfangen. Nur anstatt eine Eingabe abzufangen würde ich z.b bei Tastendruck F12 das markierte Wort übernehmen. |
Re: Markiertes Wort übernehmen
Soviel ich weiss, ist Copy&Paste das, was am zuverlässigsten funktioniert. Das geht nämlich auch bei Eingabefelder im Browser, die kein Handle haben.
Gruss Shaman |
Re: Markiertes Wort übernehmen
Hallo,
versuch in follgende Richtung zu denken: 1. mit GetActiveWindow erhälst do ein Handle für das aktive Fenster auf dem Desktop 2. mit der Hilfe der Sendmessage-Prozedur kannst du ein Objekt finden, das im Moment Focus hat. 3. mit der Hilfe von demselben Prozedurchen (Sendmessage) kannst du den markierenden Text erhalten.
Code:
Das Problemm besteht darin passendes Windowsmessage zu finden. Die Liste ist zimmlich groß, meanche Messages geben dir als Ergebniss die Record-Structur zurück, auf die du ein Zeiger als Parameter verwenden sollst.
SendMessage(Window.Handle, Windowsmessage, Param1, Param2)
Wenn du geduld hast, kannst du das ausprobieren. |
Re: Markiertes Wort übernehmen
Ich hatte es erstmal mit STRG+C simulieren probiert.
Es funktioniert auch alles soweit. Hotkey Taste gedrückt die Markierung wird auch übernommen. Das funktioniert zu 99%. Zitat:
|
Re: Markiertes Wort übernehmen
Ich habe dich so verstanden, dass dein Programm im Hintergrund leuft, und du willst einen markierenden Text aus einer fremden Anwendung kriegen.
Wenn du eine Markierung aus deinem Programm bekommen willst, geht es glaube ich noch leichter. Bei den Eingabefelder (TEdit) und ihre Erben (TRichEdit usw.) gibt es zwei Eigenschaften 'SelStart' und 'SelLength', bei einigen sogar 'SelText'. Bsp.:
Code:
oder aus im Moment laufendem Programm
Var
Mark: String; i: Integer; begin for i:=0 to MyForm.ComponentCount-1 do if myForm.Components[i] is TEdit then with MyForm.Components[i] as TEdit do if Focused then Mark:=Copy(Text,SelStart,SelLength); end;
Code:
procedure TSDIAppForm.EditSearch1Execute(Sender: TObject);
Begin if ResTxt.SelLength>0 then //ResTxt ist ein TRichText FindDialog.FindText:=Trim(Copy(ResTxt.SelText,1,length(ResTxt.SelText))); FindDialog.Execute; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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-2025 by Thomas Breitkreuz