Thema: Mousehook

Einzelnen Beitrag anzeigen

hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Mousehook

  Alt 29. Mär 2012, 10:09
Ich habe eigentlich alle Varianten ausprobiert, so oft wie bei diesem Projekt musste ich noch nie die Hardware-Resettaste drücken.
Die dll Variante habe ich aufgegeben, da sie unter Delphi wohl nicht zum Laufen zu bekommen ist und bin zu einem JournalHook gewechselt.
Das scheint problemlos zu funktionieren, auch der vorher mehrfach gekommene Event kommt jetzt richtig.
Hier die Lösung:
Delphi-Quellcode:
function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg): Integer; stdcall;
var
  Char1: PChar;
begin
  Result := CallNextHookEx(JHook, Code, wParam, Longint(@EventStrut));
  if Code < 0 then Exit;

  if Code = HC_SYSMODALON then Exit;
  if Code = HC_ACTION then
  begin
    if EventStrut.message = 523 then
    begin
      EventStrut.message := 0;
      inc(GongBums);
    end;
  end;
end;

procedure TFrmAudioCtrl.StartJour;
begin
  if FHookStarted then
  begin
    ShowMessage('Mouse is already being Journaled, can not restart');
    Exit;
  end;
  JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, 0);
  {SetWindowsHookEx starts the Hook}
  if JHook > 0 then
  begin
    FHookStarted := True;
  end
  else
    ShowMessage('No Journal Hook availible');
end;

procedure TFrmAudioCtrl.StopJour;
begin
  FHookStarted := False;
  UnhookWindowsHookEx(JHook);
  JHook := 0;
end;
Interessenhalber habe ich die Hooklösung in externer dll mal in C# und VS2010 ausprobiert.
Dort funktionierte es wie gewünscht.
Da ich in meinem Legacy Projekt keinen Code mischen will, bin ich auf die beschriebene Lösung ausgewichen.

Peter
  Mit Zitat antworten Zitat