привет,
в WinXP мое приложение успешно использует глобальный крюк мыши для получения положения мыши и щелчков, даже если оно не имеет фокуса. хук находится в отдельной .dll и инициализируется так (в delphi):
SetWindowsHookEx(WH_MOUSE, @MouseHookCB, HInstance , 0);
теперь на Win7 это в основном также работает во время выполнения, но я больше не могу хорошо отлаживать свое приложение (что я могу под XP). как только я попадаю в точку останова, Win7 полностью зависает. я не могу переключиться на другой процесс (даже диспетчер задач не открывается). если мне повезет, я смогу остановить свой процесс в IDE. хотя в большинстве случаев мне приходится перезагружаться/выходить из системы, чтобы восстановить доступ.
Я знаю, что проблема связана с крючком для мыши, поскольку его нет, если я не использую крючок. это даже если моя процедура ловушки не делает ничего, кроме следующего:
CallNextHookEx(MouseHook, Code, wParam, lParam);
т.е. просто наличие крючка вызывает проблемы.
когда globalhooks.dll записывает что-то в EventLog, я вижу, что он все еще активен, даже когда я нахожусь в точке останова.
Я пытался использовать хук lowlevelmouse через WH_MOUSE_LL, который в основном работает, но дает мне странные задержки при перемещении мыши при установке хука, а иногда и при изменении размера окна. также происходит зависание на несколько секунд при достижении точки останова, но, по крайней мере, система восстанавливается через ~ 5 секунд ... поэтому этот вариант еще хуже, поскольку он также влияет на время выполнения.
есть идеи, почему хук WH_MOUSE вообще зависает в моем приложении во время отладки?