AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Leertaste als globaler Hotkey?

Ein Thema von Cubbie · begonnen am 7. Okt 2005 · letzter Beitrag vom 9. Okt 2005
Antwort Antwort
Benutzerbild von Cubbie
Cubbie

Registriert seit: 22. Sep 2003
Ort: Hannover
16 Beiträge
 
Delphi 7 Personal
 
#1

Leertaste als globaler Hotkey?

  Alt 7. Okt 2005, 19:50
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
  Mit Zitat antworten Zitat
StefanW

Registriert seit: 22. Okt 2004
Ort: Treuen
25 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Leertaste als globaler Hotkey?

  Alt 7. Okt 2005, 19:59
such mal nach Hier im Forum suchenREGISTERHOTKEY

//EDIT: der 3. Link ist ganz gut
Stefan W.
  Mit Zitat antworten Zitat
Benutzerbild von Cubbie
Cubbie

Registriert seit: 22. Sep 2003
Ort: Hannover
16 Beiträge
 
Delphi 7 Personal
 
#3

Re: Leertaste als globaler Hotkey?

  Alt 8. Okt 2005, 01:00
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...
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#4

Re: Leertaste als globaler Hotkey?

  Alt 8. Okt 2005, 01:20
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.... )
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Leertaste als globaler Hotkey?

  Alt 8. Okt 2005, 09:09
mit RegisterHotkey geht das was du vorhast nich. Denn dann könntest du nirgends mehr die Leertaste verwenden weil der key "verschluckt" wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Cubbie
Cubbie

Registriert seit: 22. Sep 2003
Ort: Hannover
16 Beiträge
 
Delphi 7 Personal
 
#6

Re: Leertaste als globaler Hotkey?

  Alt 9. Okt 2005, 01:01
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?
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#7

Re: Leertaste als globaler Hotkey?

  Alt 9. Okt 2005, 01:05
Hilft dir dieses Programm vielleicht weiter?

//Edit: Von wegen Kommunikation mit der DLL halt....
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Leertaste als globaler Hotkey?

  Alt 9. Okt 2005, 14:09
@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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Cubbie
Cubbie

Registriert seit: 22. Sep 2003
Ort: Hannover
16 Beiträge
 
Delphi 7 Personal
 
#9

Re: Leertaste als globaler Hotkey?

  Alt 9. Okt 2005, 14:32
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:53 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