Допустим есть глобальный клавиатурный хук(без dll), при нажатии например клавиши VK_CLEAR он должен нажать левую клавишу мыши и сразу отпустить ее. Когда VK_CLEAR отпускается нечего не делаем лишь блокируем ее. И тут появляется ошибка: если есть нажать VK_CLEAR и не отпускать некоторое время, то происходит следующие: при вызове mouse_event поток отвечающий за хук перестает отвечать, что с ним происходит так и не понял, но это поток уже никакими обычными средствами не убивается. И уже все последующие вызовы mouse_event из других приложений приводят к тому же результату для приложения использующее mouse_event. Пробовал между вызовами mouse_event вставлять keybd_event, а так же Sleep - нечего не помогло. Может кто знает почему это происходит и как это решить? Вот код пример. Код (ASM): proc LowLevelKeyboardProc [ebp esi edi ebx],!nCode,!wParam,!lParam cmp [!nCode],0 jne .Skip mov ebx,[!lParam];ebx = [!lParam] movzx esi,byte[ebx+KBDLLHOOKSTRUCT.vkCode];ebx = [!lParam] cmp esi,VK_CLEAR jne .Skip test [ebx+KBDLLHOOKSTRUCT.flags],0x80;ebx = [!lParam] jnz .InterlockKey .Mouse: invoke mouse_event,MOUSEEVENTF_LEFTDOWN,0,0,0,0 invoke mouse_event,MOUSEEVENTF_LEFTUP,0,0,0,0 .InterlockKey: mov eax,1 ret .Skip: invoke CallNextHookEx,0,[!nCode],[!wParam],[!lParam] ret endp Решение есть, так как программа покрайнемере одна имеется но как в ней это решаеться ? Программа KeyExtender, прикрепляю скрин, в ней идет просто две mouse_event, а я так и не смог понять почему у меня глючит а в этой программе нет.
Нашел решение. Почему это происходит фиг его знает, но происходит это только если в самом клавиатурном низкоуровневом хуке использовать два раза или более mouse_event, решается это выполнением mouse_event вне хука отправив например сообщение в поток в катором выполняеться сам хук. В ответ на это сообщение и выполнить mouse_event .