Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Leertaste als globaler Hotkey? (https://www.delphipraxis.net/54614-leertaste-als-globaler-hotkey.html)

Cubbie 7. Okt 2005 18:50


Leertaste als globaler Hotkey?
 
Hi,

ich suche eine Möglichkeit, die Leertaste als globalen Hotkey abzufangen. Ich hab schon mit Hooks experimentiert, aber ohne Erfolg.
Außerdem gibt es wohl auch eine Möglichkeit, sowas ohne Hooks zu realisieren, was mir deutlich lieber wäre.. :)

Kurz zur gewünschten Funktionsweise:
Mein Programm soll im Hintergrund laufen und nur dann angezeigt werden, wenn man die Leertaste für sagen wir 2 Sekunden hält. Ansonsten muss die Taste wie immer funktionieren. Das Programmfenster wird jetzt so lange angezeigt, wie die Leertaste festgehalten wird und verschwindet, wenn man sie loslässt. Zusätzlich sollte man das Fenster aber normal benutzen können, obwohl die Leertaste grade gehalten wird, also Mausklicks und evtl. auch andere Tastendrücke müssten vom Fenster normal verarbeitet werden, solange es angezeigt wird.

Da bisher alle Versuche gescheitert sind, frage ich hier... hat vielleicht jemand eine Idee, wie man das vernünftig realisieren könnte? :)

Gruß,
Cubbie

StefanW 7. Okt 2005 18:59

Re: Leertaste als globaler Hotkey?
 
such mal nach Hier im Forum suchenREGISTERHOTKEY

//EDIT: der 3. Link ist ganz gut

Cubbie 8. Okt 2005 00:00

Re: Leertaste als globaler Hotkey?
 
Danke, aber das hilft mir leider nicht. Mein Problem ist ja nicht, die Taste abzufangen (dafür gibts mehrere Möglichkeiten), sondern dann das entsprechende Verhalten hinzukriegen. Und da komm ich kein Stück weiter...

Daniel G 8. Okt 2005 00:20

Re: Leertaste als globaler Hotkey?
 
Hast du dich damit schon auseinandergesetzt?

MSDN-Library durchsuchenKeyboard Input
MSDN-Library durchsuchenGetKeyState

Mit GetKeyState bekommst du den Status einer Taste. Dann kannst du ja z.B. prüfen (mit Hilfe eines Timers?), ob die Leertaste länger als 2 Sek. gedrückt wird. Wenn nicht, musst du den Befehl halt an die Anwendung, die den Fokus hat, weiterleiten.


(Ich hoffe mal, ich hab' nicht allzu viel Müll erzählt.... ;) )

SirThornberry 8. Okt 2005 08:09

Re: Leertaste als globaler Hotkey?
 
mit RegisterHotkey geht das was du vorhast nich. Denn dann könntest du nirgends mehr die Leertaste verwenden weil der key "verschluckt" wird.

Cubbie 9. Okt 2005 00:01

Re: Leertaste als globaler Hotkey?
 
Erstmal danke für alle Tips.. ich habs inzwischen hinbekommen, dass die Tasten global abgefangen werden. Allerdings jetzt doch über ne DLL.
Dadurch hab ich jetzt das Problem, dass ich nicht weiß, wie ich von der DLL aus jetzt entsprechende Kommandos an mein Hauptprogramm schicke... ich recherchiere grade SendMessage, aber darüber finde ich reichlich wenig hilfreiches. Ist das der einzige Weg oder gibt es eine bessere Lösung? :?

Daniel G 9. Okt 2005 00:05

Re: Leertaste als globaler Hotkey?
 
Hilft dir dieses Programm vielleicht weiter?

//Edit: Von wegen Kommunikation mit der DLL halt....

SirThornberry 9. Okt 2005 13:09

Re: Leertaste als globaler Hotkey?
 
@Cubbie: Anstelle von SendMessage könntest du mit Memorymapped files arbeiten. Du könntest dabei von deinem Programm aus einmal das Handle darin plazieren (Bzw. könntest du dann auch GlobalAtoms verwenden) oder u pollst mit deinem hauptprogramm die MemoryMapped File bis was neues rein geschrieben wurde.
Deine DLL muss also wenn sie die Leertaste wahrnimmt in die MemMappedFile schreiben (am besten mit Zeit) und in deinem Programm prüfst du dann ob in der File sich die Zeit geändert hat, wenn dem so ist liest du die restlichen Daten aus bzw. weißt in dem Fall schon das die Taste gedrückt wurde.

Cubbie 9. Okt 2005 13:32

Re: Leertaste als globaler Hotkey?
 
Das mit den MemoryMappedFiles klingt gut, allerdings müsste ich dann in regelmäßigen Intervallen auf Änderungen prüfen, richtig? Da das Programm (wenn es denn jemals fertig wird ;)) permanent im Hintergrund laufen soll, würde ich das ungern so lösen. Wäre aber zumindest mal ein Anfang.. verbessern kann man ja immer noch. :)

Inzwischen hab ich es übrigens hinbekommen, eine Message ans Hauptprogramm zu senden, die dort ein Event auslöst... also eigentlich genau, wie ichs haben will. Jetzt muss ich nur noch rauskriegen, warum sich das Hauptprogramm dabei aufhängt... ;)
Danke nochmal an Daniel.. das Programm hat in der Tat geholfen. :)


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