Hallo Delphi-Laie
so ganz nach Laie tönt deine Antwort nicht, aber inzwischen bin ich dahinter gekommen, dass das Problem nicht am verzögerten Neustart der
DLL liegt. Auch wenn ich den Neustart z.B. mit Deiner Methode verzögere, bis die
DLL sicher weg ist, geht danach bereits beim ersten HookOn der SetThreadDesktop nicht. Ich bin da wirklich Laie, aber ich vermute deshalb, die
DLL übernimmt/bezieht den Thread vom aufrufenden Programm/Service und bleibt somit unverändert.
Das Problem liegt eindeutig daran, dass SetThreadDesktop nicht geht, wenn bereits mal ein Hook gesetzt war und ich keine andere Art kenne, wie den SetWindowsHookEx auf den richtigen Desktop zu leiten. Nur OpenInputDesktop reicht nicht.