Здравствуйте Tagus, Вы писали:
T>Здравствуйте SergH, Вы писали:
SH>>Я думаю, проблема в том, что происходит попытка вызвать TimerProc, когда DLL уже выгружена. Почему не помогает KillTimer не знаю. Можно поместить TimerProc в другую dll, загружать её при загрузке в новый процесс, а потом не выгружать.
T>Вряд-ли. DLL не выгружается вызовом UnhookWindowsHookEx.
T>Для выгрузки DLL нужно вызвать FreeLibrary, чего не делается.
T>Кроме того, в случае глобального хука, который имеет место
T>быть, DLL не выгрузится даже после FreeLibrary, поскольку
T>глобальный хук привязывается ко всем запущенным в системе
T>процессам, соответственно, DLL должна висеть в памяти
T>пока все процессы не завершатся.

Дело в том, что ты ведь явно ДЛЛ не загружаешь by LoadLibrary. Как только ты ставишь хук (в частности на события от мыши), и когда такое событие происходит, система проверяет, не установлен ли хук. Если установлен, то далее система проверяет, находится ли ДЛЛ с нужной хуковой процедурой в памяти — если да, то она просто отображается на адресное пространство соответствующего процесса, если нет, то ДЛЛ в память загружается и затем отображается. Затем происходит вызов хуковой процедуры. Когда система определит, что хуков нет (UnhookWindowsHookEx), то никакого смысла держать в памяти ДЛЛ с хуковой процедурой нет и она (ДЛЛ) будет выгружена.