Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sondertasten (Play, Stop, nächster Titel) bei Tastaturen (https://www.delphipraxis.net/24835-sondertasten-play-stop-naechster-titel-bei-tastaturen.html)

XHelp 29. Jul 2004 01:25

Re: Sondertasten (Play, Stop, nächster Titel) bei Tastaturen
 
Zitat:

Zitat von Der_Ventilator
Wenn ich z.B in einer FullScreenAnwendung [Spiel] bin und ich meinem eigenen MediaPlayer sagen möchte, dass er weiterschalten solle?

Das muss man, denk ich, mit einem hook ("Falle") machen.

Delphi-Quellcode:
const
  WM_USER = $0400; // aus messages.pas
  WM_KEYBHOOK = WM_USER + 346;

[...] type [...]

var
  KeyboardHook: HHOOK;

function KeyboardProc(hCode: Integer; wParam: Longint; lParam: Longint): LRESULT; stdcall;
var
  Wnd: THandle;
begin
  if hCode = HC_ACTION then
    begin
      Wnd := FindWindow(nil, 'Form1');
      if Wnd > 0 then
        PostMessage(Wnd, WM_KEYBHOOK, wParam, lParam);
    end;
  Result := CallNextHookEx(KeyboardHook, hCode, wParam, lParam);
end;

function SetKeyboardHook: Boolean;
begin
  KeyboardHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0);
  Result := KeyboardHook <> 0;
end;

function RemoveKeyboardHook: Boolean;
begin
  Result := UnhookWindowsHookEx(KeyboardHook);
end;
Das sind erstmal die funktionen, die du unbedingt brauchst.

Jetzt erstellst du eine prozedur mit dem namen: "WMKEYBHOOK". Das ist so was wie OnKeyPress in diesem fall.

Delphi-Quellcode:
procedure TMainForm.WMKEYBHOOK(var Msg: TMessage);
begin
    if IntToStr(Msg.wParam)=13 then [......];
end;
Um die falle jetzt zu starten, irgendwo in dein programm
Delphi-Quellcode:
if not SetKeyboardHook then ShowMessage('error');
reinschreiben. (OnCreate oder so was)

Um es zu stopen:
Delphi-Quellcode:
if not RemoveKeyboardHook then ShowMessage('error');
Bei dem Beispiel wurde eigentlich eine dll benutzt, aber ich habe es auch so ausprobiert, das funktioniert trotzdem

Der_Ventilator 30. Jul 2004 19:18

Re: Sondertasten (Play, Stop, nächster Titel) bei Tastaturen
 
OK.... danke für die Antwort; werde wohl etwas brauchen um die Funktion zu verstehen... mal nach meinem Umzug testen.

Alexander 30. Jul 2004 19:57

Re: Sondertasten (Play, Stop, nächster Titel) bei Tastaturen
 
Für allgemeine Fragen bezüglich Hooks kannst du dir von Assarbad das Tutorials bezüglich Hooks ansehen (sehr umfangreich & gut beschrieben)

Robert Marquardt 30. Jul 2004 20:47

Re: Sondertasten (Play, Stop, nächster Titel) bei Tastaturen
 
Um mal die Extra-Tasten genauer zu erklaeren:
Die gehoeren garnicht zur Tastatur. Eine USB Tastatur tritt als mehrere Geraete auf und
nur die normalen Tasten sind im Keyboard-Interface.
Unter Win 2000/XP laeuft ein System-Thread um das zweite Interface auszulesen und die entsprechenden
Tasten-Messages zu generieren.
Es gibt noch ein drittes Interface nur fuer die Power-Taste auf den Tastaturen.

Daraus ergeben sich mehrere lustige Seiteneffekte. Das Keyboard-Interface ist gegen Lesen durch
ein Programm geschuetzt, da Windows das Interface exklusiv oeffnet.
Das zweite Interface hingegen ist nicht exklusiv geoeffnet (oder unter Win 98 garnicht).
Daher kann die Tray-Applikation zum Tastaturtreiber selber die Funktion des in Win 98 fehlenden
System-Threads uebernehmen. Zusaetzlich kann die Tray-Applikation auch noch den Treiber beeinflussen
und alle moeglichen Mappings vornehmen.

Der_Ventilator 1. Aug 2004 01:31

Re: Sondertasten (Play, Stop, nächster Titel) bei Tastaturen
 
Dennoch springt KeyDown bei mir weder auf $B0 an, noch funktioniert die beschriebene Funktion von XHelp.

Hat jemand eine funktionierende Demo?

Vjay 1. Aug 2004 03:26

Re: Sondertasten (Play, Stop, nächster Titel) bei Tastaturen
 
evtl auch auf shift+strg+etc down achten dabei
hab ne fujitsu und da sind manche doppelt belegt weils wohl nichtmehr soviele freie vks_ gab.

ps habn simplen timer gemacht + getkeystate funzt auch. wie man die keys rausfindet dürfte bekannt sein


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr.
Seite 3 von 3     123   

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-2025 by Thomas Breitkreuz