Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Laptop spezial Tasten (https://www.delphipraxis.net/83549-laptop-spezial-tasten.html)

arbu man 4. Jan 2007 12:45


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

Robert Marquardt 4. Jan 2007 12:51

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 http://jcl.sf.net/daily und http://jvcl.sf.net/daily

arbu man 7. Jan 2007 13:49

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:
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;
mfg, Björn

Robert Marquardt 7. Jan 2007 14:03

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.

Die Muhkuh 7. Jan 2007 14:04

Re: Laptop spezial Tasten
 
Mit der Komponente klappts ;-)

Robert Marquardt 7. Jan 2007 14:13

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.

Gausi 7. Jan 2007 14:42

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!

Robert Marquardt 7. Jan 2007 15:17

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.

Gausi 7. Jan 2007 15:35

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 ;-)

Robert Marquardt 7. Jan 2007 17:18

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 20:33 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