Крюк DLL выгружаются в своем цикле сообщений.Принудительное их прохождение в цикле сообщений помогает выгрузить их.
Добавьте это после вашего UnhookWindowsHookEx, чтобы заставить все циклы сообщений проснуться:
DWORD dwResult;
SendMessageTimeout(HWND_BROADCAST, WM_NULL, 0, 0, SMTO_ABORTIFHUNG|SMTO_NOTIMEOUTIFNOTHUNG, 1000, &dwResult);
Однако у меня все еще есть проблема со временемко времени.Я не знаю, откуда это.Я полагаю, что заблокированный процесс может помешать dll выгружаться, но у меня нет доказательств этого.