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
if 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