![]() |
Laptop spezial Tasten
Hi,
ich habe ein Leptop mit spezial Tasten (Lied zurüch/vor, Stop, Pause) nun sind diese Tasten auch erreichbar wenn die Klappe zu ist. Nun würde ich diese Tasten gerne für Aktionen in meinen Programm verwenden, leider weiss ich nicht wie ich auf den Druck dieser Tasten reagieren soll ? Das OnKeyDownEvent wird nicht ausgelöst. Hat bejemand eine Idee wie man den Druck dieser Tasten reagieren kann ? mfg, Björn |
Re: Laptop spezial Tasten
Das duerften die Multimedia-Tasten sein. WM_APPCOMMAND ist die Message, die diese Tasten meldet.
Die JVCL enthaelt eine Komponente dazu (JvAppCommand). Man braucht aber die JCL und JVCL aus dem SVN. Download von ![]() ![]() |
Re: Laptop spezial Tasten
Danke für die Info, ich frage nun diese Message in meiner Form ab, Aber leider erscheint diese Message nie, ich denke mal, mein Laptop macht etwas andere nur nicht die Message WM_APPCOMMAND senden. Oder sehe ich das Falsch.
Delphi-Quellcode:
mfg, Björn
type
TForm1 = class(TForm) protected procedure MediaKey (var aMSG: tMessage); message WM_APPCOMMAND; private { Private-Deklarationen } public { Public-Deklarationen } end; ... { TForm1 } procedure TForm1.MediaKey(var aMSG: tMessage); begin showmessage(''); end; |
Re: Laptop spezial Tasten
Probier noch die Komponente aus der JVCL. Es koennte sein dass die Message nicht bei der Form ankommt.
Falls du eine USB-Multimediatastatur zur Hand hast, dann an den Laptop anstecken und sehen ob sie WM_APPCOMMAND ausloest. |
Re: Laptop spezial Tasten
Mit der Komponente klappts ;-)
|
Re: Laptop spezial Tasten
Zur Erleuchtung aller hier noch der Mechanismus den Windows mit den Multimediatasten implementiert.
Erstens sind das (besonders bei USB-Tastaturen) gar keine Tasten der Tastatur. Das USB-Geraet meldet sich als mehrere Geraete, wobei die Multimediatasten in einem eigenen Geraet untergebracht sind. Es laeuft ein System-Service, der dieses Geraet liest und WM_APPCOMMAND an alle Applikatinoen schickt. Meldet sich keine Applikation und will die Multimediatasten fuer sich haben, so fuehrt der Service die zugewiesene Standardaktion aus. Offensichtlich geht die Message zwar an das Hauptfenster, wird aber nicht an die Unterfenster weitergereicht. Da bei Delphiprogrammen das Hauptfenster verborgen ist, gelangt die Message nicht an die Forms, die Unterfenster sind. Alles in allem eine wirklich schlimme Kruecke, die Microsoft da implementiert hat. |
Re: Laptop spezial Tasten
@Robert: Hast du da genauere Informationen zu? Ich hatte da mal Probleme bei meinem MP3-Player, da dieser Service scheinbar nicht auf jedem System läuft, so dass die Tastendrücke manchmal nicht registriert werden, wenn meine Anwendung nicht den Fokus hat.
Ich habe dann WM_APPCOMMAND gehooked, was natürlich schiefläuft, wenn dieser Service doch läuft, da dann jeder Tastendruck mehrfach bei meiner Anwendung ankommt. Gelöst habe ich das so, dass beim ersten registrierten WM_APPCOMMAND ein kleiner interaktiver Test durchgeführt wird, ob dieser Service läuft oder nicht und dementsprechend ab dann der Hook installiert wird oder nicht. Optimal ist das nicht. Wenn du da Näheres zu weißt, würde mich das brennend interessieren! |
Re: Laptop spezial Tasten
Der Service sollte eigentlich immer laufen. Er wird bei Win 2000 und XP immer eingerichtet. Man kann ihn natuerlich ohne Schaden fuer das System beenden. Man verliert nur die Aktionen fuer die Multimediatasten. Da koennte der eine oder andere sicherheitsfanatische Benutzer den Service abgestellt haben.
Ich habe mir nochmal die MSDN-Hilfe zu WM_APPCOMMAND durchgelesen und es scheint noch komplizierter zu sein. Dort wird noch ein Shell Hook erwaehnt. |
Re: Laptop spezial Tasten
Naja, ich hab ne Media-Tastatur von Logitech, da läuft ein "iTouch" im Hintergrund, was "diese Tasten verteilt". beendet man das, kommen die Tasten nur am aktiven Fenster an. Der Shellhook ist wahrscheinlich in etwa das, was ich gemacht habe - nur verträgt der sich nicht mit iTouch, da das scheinbar tiefer ansetzt als ein solcher Hook, was dann diesen komischen Effekt verursacht.
Ob das ein Sicherheitsfanatiker oder einer mit nem seltsamen System war, weiß ich nicht. Musst jetzt aber nicht groß anfangen, da was zu suchen. Ich bin nur hellhörig geworden, da du scheinbar etwas davon verstehst - da wollte ich mal nachfragen :D. Generell funktioniert mein System ja. Und mein "Test" beschränkt sich auf einmal "Play" drücken und Klick auf OK. Das einmalig ist noch zu verkraften, denke ich ;-) |
Re: Laptop spezial Tasten
Was diese iTouch Software (und vergleichbare) anrichten ist noch schlimmer.
Es wird der HID Treiber fuer die Tastatur (oder Maus) ersetzt. Der Treiber hat zusaetzlich einen Seitenausgang. Der wird von der Tray-Applikation (iTouch) geoeffnet. Darueber kann iTouch dem Treiber sagen wo die Tastendruecke hingehen sollen. Nun kann iTouch beliebige Aktionen der Taste zuordnen. Vermutlich wird sie den WM_APPCOMMAND Mechanismus selber implementieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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