Home » Tutorials » Systemnahe Programmierung » Mouse- und Tastatur-Hooks

Mouse- und Tastatur-Hooks

Das versprochene Schmankerl…

Um es zu nutzen, muss man zuerst eine beliebige Datei (in unserem speziellen Fall eine DLL) als Ressource in das Programm einbinden.

HookDLL BINRES "Hooks.DLL"
//Name Restyp Dateiname

Die eingebundene Ressource kann man nun zur Laufzeit extrahieren und im Falle einer DLL dynamisch laden. Eingebunden wird eine Ressourcendatei so:

{$R main.res}

Die benötigte und von mir entwickelte Prozedur sieht wie folgt aus und braucht nur die WINDOWS.PAS eingebunden … CLASSES.PAS etc (wo die Streamklassen drin sind) kann man sich sparen. Nico hat dann an der Stelle, wo ich ihm die Prozedur vorgestellt habe, gleich mit mir um die Wette optimiert … Sie sollte es also nun sein 😉

function putbinresto(binresname: pchar; newpath: string): boolean;
var ResSize, HG, HI, SizeWritten, hFileWrite: Cardinal;
begin
  result := false;
  HI := FindResource(hInstance, binresname, 'BINRES');
  if HI <> 0 then begin
    HG := LoadResource(hInstance, HI);
    if HG <> 0 then begin
      ResSize := SizeOfResource(hInstance, HI);
      hFileWrite := CreateFile(pchar(newpath), GENERIC_READ or
      GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
      CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);
      if hFileWrite <> INVALID_HANDLE_VALUE then
      try
        result := (WriteFile(hFileWrite, LockResource(HG)^, ResSize,
        SizeWritten, nil) and (SizeWritten = ResSize));
      finally
        CloseHandle(hFileWrite);
      end;
    end;
  end;
end;

Die Anwendung dieser Prozedur kann man im beiliegenden Beispiel zu den Hooks nachvollziehen.

Viel Spaß mit Hook-Programmierung wünscht

-=Assarbad=-