Sorry, ich weiß dass pushen vor 24 Stunden nicht gern gesehen ist, aber ich habe jetzt mal das Tutorial über Hooks durchgearbeitet und es damit versucht:
Delphi-Quellcode:
function InstallHook(Hwnd: THandle): Boolean;
stdcall;
external '
PresenterHook.dll';
function UninstallHook: Boolean;
stdcall;
external '
PresenterHook.dll';
{...}
procedure TForm1.FormCreate(Sender: TObject);
begin
InstallHook(
Handle);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UninstallHook;
end;
Mit folgender
DLL:
Delphi-Quellcode:
library PresenterHook;
uses
Windows, Messages, Dialogs, SysUtils;
var
HookHandle: Cardinal = 0;
WindowHandle: Cardinal = 0;
function PresenterHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
case nCode < 0 of
TRUE: exit;
FALSE:
begin
if nCode = HSHELL_APPCOMMAND then
ShowMessage('Hook:' +#13#10+ IntToStr(wParam) +#13#10+ IntToStr(lParam));
end;
end;
end;
function InstallHook(Hwnd: Cardinal): Boolean; stdcall;
begin
Result := False;
if HookHandle = 0 then
begin
HookHandle := SetWindowsHookEx(WH_SHELL, @PresenterHookProc, HInstance, 0);
WindowHandle := Hwnd;
Result := TRUE;
end;
end;
function UninstallHook: Boolean; stdcall;
begin
Result := UnhookWindowsHookEx(HookHandle);
HookHandle := 0;
end;
exports
InstallHook,
UninstallHook;
end.
Leider passiert gar nichts
Bei Play/Pause wird immer noch der WMP gestartet.
Was mache ich falsch?
Warum klappt das mit dem WMP wenn er minimiert ist, aber nicht mit meinem Programm?
Übrigens mit PowerDVD klappts auch, wenn PowerDVD minimiert ist und ich z.B. Play/Pause drücke, so wird die Wiedergabe in PowerDVD pausiert und NICHT der WMP gestartet!
Warum kriege ich sowas in meinem Programm nicht hin?
Ich bin echt am verzweifeln