Если ваш процесс умирает, UnhookWindowsHookEx вызывается неявно, и ваши хуки удаляются. .Dll выгружается кодом обработки сообщений после получения нового сообщения. Поэтому некоторые фоновые процессы, которые почти никогда не получают никаких сообщений, могут все еще держать библиотеку заблокированной еще долго после того, как ваш хук был удален. Трансляция сообщения WM_NULL обычно помогает. Мне нравится отправлять его несколько раз после отсоединения.
SendNotifyMessage(HWND_BROADCAST, WM_NULL, 0, 0);