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