Einzelnen Beitrag anzeigen

Benutzerbild von XHelp
XHelp

Registriert seit: 12. Jul 2004
Ort: Duisburg
172 Beiträge
 
Delphi 6 Enterprise
 
#21

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

  Alt 29. Jul 2004, 02:25
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 programmif not SetKeyboardHook then ShowMessage('error'); reinschreiben. (OnCreate oder so was)

Um es zu stopen: if not RemoveKeyboardHook then ShowMessage('error'); Bei dem Beispiel wurde eigentlich eine dll benutzt, aber ich habe es auch so ausprobiert, das funktioniert trotzdem
Alex
Von allen Dingen die mir verloren gegangen,
hab ich am meisten an meinem Verstand gehangen
  Mit Zitat antworten Zitat