AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Globales Hotkey gehalten?, sowas wie WM_KEYDOWN
Thema durchsuchen
Ansicht
Themen-Optionen

Globales Hotkey gehalten?, sowas wie WM_KEYDOWN

Ein Thema von Hedge · begonnen am 10. Sep 2008 · letzter Beitrag vom 10. Sep 2008
Antwort Antwort
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#1

Globales Hotkey gehalten?, sowas wie WM_KEYDOWN

  Alt 10. Sep 2008, 16:52
Hi,
ich hab ein Programm, dass mitbekommen soll, ob ein Hotkey gedrückt gehalten wird.
Wird der Hotkey gedrückt, dann wird diese Code ausgeführt:

Delphi-Quellcode:
// WM_HOTKEY Hotkey Handler
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = Hotkey_id then
  begin
   //...
  end;
end;
Das Programm soll ein Form so lange anzeigen wie das Hotkey gedrückt gehalten wird.

und noch eine Frage.
Die Struktur von TWMHotKey sieht so aus:

Delphi-Quellcode:
TWMHotKey = packed record
  Msg: Cardinal;
  HotKey: Longint;
  Unused: Longint;
  Result: Longint;
end;
Aber nirgends ist dokumentiert was man mit Msg, Unused oder Result machen kann :/
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Globales Hotkey gehalten?, sowas wie WM_KEYDOWN

  Alt 10. Sep 2008, 17:22
Hallo,

Du könntest z.B in einem Timer GetAsyncKeyState aufrufen und überprüfen, ob die Hotkey-Taste noch gedrückt wird.
Thomas
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Globales Hotkey gehalten?, sowas wie WM_KEYDOWN

  Alt 10. Sep 2008, 17:37
Zitat von toms:
Hallo,

Du könntest z.B in einem Timer GetAsyncKeyState aufrufen und überprüfen, ob die Hotkey-Taste noch gedrückt wird.
Guter Vorschlag aber es gibt ein Problem bei GetAsyncKeyState:

The return value is zero if a window in another thread or process currently has the keyboard focus.

Mein Form soll wenn es erscheint den Fokus nicht haben weswegen ich es mit der Funktion nicht mehr bestimmen könnte.

Habe im Moment einen Workaround eingebaut:

Wenn der Hotkey gedrückt wird, dann wird ein Timmer aktiviert (800 Millisekunden).
Die Hotkey-Funktion wird wenn man die Taste gedrückt hält oft hintereinander aufgerufen und bei jedem Aufruf, wird der Timer deaktiviert und wieder aktiviert.
So erreicht der Timer nie die Ausführung seines Events da er solange der Hotkey gedrückt ist, zurückgesetzt wird.
Wenn der Hotkey jedoch für ca. 800 Millisekunden nicht berührt wurde, dann wird die Timer-Funktion abgefeuert und das Fenster wieder versteckt.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: Globales Hotkey gehalten?, sowas wie WM_KEYDOWN

  Alt 10. Sep 2008, 17:45
Zitat von Hedge:
Guter Vorschlag aber es gibt ein Problem bei GetAsyncKeyState:

The return value is zero if a window in another thread or process currently has the keyboard focus.
Bei mir funktioniert es auch, wenn ein Fenster eines anderen Fensters den Focus besitzt.


Zitat von msdn:
Windows NT/2000/XP: The return value is zero for the following cases:

The current desktop is not the active desktop
The foreground thread belongs to another process and the desktop does not allow the hook or the journal record.
Thomas
  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 21:35 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