Hab jetzt mal im HookProc um alles die Bedingung
if FHook <> 0 then
gesetzt.
Was hast du da genau gemacht? Kannst du mal den Quelltext posten. Bei deinem ursprünglichem Quelltext ist klar das irgend etwas abrauchen kann weil du mit FHook arbeitest obwohl es nicht initialisiert ist (ist nur in der Instanz initialisiert die für die du installHook aufrufst).
Wenn du jetzt in HookProc prüfst ob "FHook <> 0" ist müsste man davon ausgehen das nicht initialisierte globale Variable automatisch auf 0 gesetzt werden. Zudem frage ich mich wie du dann CallNextHookEx aufrufst - ich hoffe doch du rufst es auf und lässt den Aufruf nicht ganz weg?!