Вопрос по хуку. В кратце: Почему дублируется перехваченное добро?

Тема в разделе "WASM.BEGINNERS", создана пользователем beginerHacker, 12 фев 2010.

  1. beginerHacker

    beginerHacker New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2009
    Сообщения:
    30
    Хук перехватывает нажатую клаву, потом идет в процесс обработки, там идет запись клавы в файл. Но в файл записывается два символа одной клавы. Вопрос: ПОЧЕМУЖЕ ТАААК????Что ток не делал.... Если все это добро проганяю через отладчик - то все нормально работает, когда работает самостоятельно - дублирует символы... Подскажите ПОЖАЛУЙСТА!!!!! Что не так???
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4. include \masm32\include\windows.inc
    5. include \masm32\include\user32.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\user32.lib
    8. includelib \masm32\lib\kernel32.lib
    9.  
    10. .data
    11. FName    db "Log.txt",0
    12.  
    13. HandleFile        DWORD ?
    14. DLLHandle      DWORD ?    ;Хендел длл
    15. hWnd                DWORD ? ; Хендел installHook
    16. HendleHook    DWORD ?
    17. cWritten       DWORD ?
    18. KeyGoFile      db "q",0
    19. .code
    20.    DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
    21.    push hInst
    22.    pop DLLHandle
    23.    call CreateF
    24.            mov  eax,TRUE
    25.            ret
    26.    DllEntry Endp  
    27. ;##################################################################### ############################################
    28.  ;###########====Запись в ФАЙЛ====================
    29.   WriteF proc
    30.  invoke WriteFile, HandleFile , ADDR KeyGoFile,1, ADDR cWritten, NULL
    31.    ret
    32.  WriteF endp
    33.  
    34.               ;==================Создание файла==============
    35.  CreateF proc
    36.  invoke CreateFile, ADDR FName, GENERIC_WRITE,
    37.                                                FILE_SHARE_READ or FILE_SHARE_WRITE,
    38.                                                NULL,
    39.                                                OPEN_ALWAYS,
    40.                                                FILE_ATTRIBUTE_NORMAL,
    41.                                                0
    42.      push eax
    43.      pop HandleFile
    44.      ret
    45.  CreateF endp
    46.  
    47. ;=====================ОБРАБОТКА СООБЩЕНИЯ=====================
    48.          ObrMess proc nCode:DWORD, wParam:DWORD,lParam:DWORD
    49.                        mov eax, wParam                                        
    50.                                 .if eax==81
    51.                                    Call WriteF                                                              
    52.                                 .endif
    53.                          invoke CallNextHookEx, HendleHook, nCode,wParam,lParam
    54.                          ret
    55.          ObrMess endp
    56.     ;=================УСТАНОВКА ХУКА=======================
    57.    InstallHook proc hwnd:DWORD
    58.         push hwnd
    59.         pop hWnd
    60.               invoke SetWindowsHookEx, WH_KEYBOARD, Addr ObrMess,DLLHandle, NULL  
    61.                    mov HendleHook, eax
    62.                  ret
    63.    InstallHook endp  
    64.  
    65. End DllEntry
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    "ПАТАМУШТА" один на KEYDOWN, другой на KEYUP :lol:
    Глянь в мсдн и обрати внимание на старший бит lParam. А также заодно на nCode = HC_NOREMOVE, при котором можно тоже дублирование схлопотать, если прога прога вздумает заюзать PeekMessage c PM_NOREMOVE
     
  3. beginerHacker

    beginerHacker New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2009
    Сообщения:
    30
    Leo Спасиб конечно..... Нэт тупит - не могу открыть мсдн(((В наличии его нет
    Подскажи пожалуйста, как исправить в коде? где что поменять? СПАСИБО!
     
  4. beginerHacker

    beginerHacker New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2009
    Сообщения:
    30
    HELP ME PLSSSSSS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
  5. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    beginerHacker
    ЗАПИСЫВАТЬ ИЛИ ПРИ НАЖАТИИ или ПРИ ОТПУСКАНИИ клавиши (KEYUP/KEYDOWN)
     
  6. beginerHacker

    beginerHacker New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2009
    Сообщения:
    30
    ДА Я ЭТО ПОНЯЛ, ЧТО НАДО ТАК, И ПЫТАЛСЯ - НО БЕЗ УСПЕШНО((((((((((((((((((((((((((((((
    Люди добрые, ткните носом меня.... Покажите код
    Я еще вот как пытался:
    Если в lParam отвечает за За кейуп и кейдовн, то в последнем бай должно быть 1 или 0
    Ставил условие
    если ноль, то не записывать, но тогда ВООБЩЕ не получается...
    mov ecx, lParam
    mov eax, wParam
    .if cl==1
    .if eax==81
    функция записи
    .endif
    .endif
     
  7. beginerHacker

    beginerHacker New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2009
    Сообщения:
    30
    На часах 1:10 ночи... Эта проблема меня уже заканала.... Спать спокойно не могу.
    Прошу вАС!!! Помогите решить проблему........
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Интернет конечно вещь мощная, но азбуку все-таки в школе учат. Читаешь, пробуешь, потом только спрашиваешь.
    Твой вопрос все нормальные программисты решали в пору своей юности, не задавая ни одного вопроса- все решает поиск и УМ. Или вы ошиблись с выбором профессии :)
     
  9. beginerHacker

    beginerHacker New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2009
    Сообщения:
    30
    Valterg
    Професиия у меня Технолог продукции общественного питания. Программирую толька из-за интереса, это типа хоББи.
    .........................
     
  10. beginerHacker

    beginerHacker New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2009
    Сообщения:
    30
    И почему же все так боятся помочь..............................
     
  11. beginerHacker

    beginerHacker New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2009
    Сообщения:
    30
    За все время на даной теме, могу сказать спасибо одному человеку! LEO!!! Показал в какую сторону надо копать.
    Проблему решил сам!!!!!!!!!!!
     
  12. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    да ты не реально крутой!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    но всем как говориться ....

    А мне показалось, вы еще в школе, как страшно жить!

    А вот теперь ссерьезно, какой ммысл помогоать, если 1. ответ очевидет 2. в отладчики его увидишь сразу. 3. Он тебя не научит ( а раз уж это хобби, то готовые решения тебе не нужны). Какой смысл то? за тебя каждую тривиальную проблемку решать ? или код еще писать. Про каждый "if" будешь на форуме спрашивать?
     
  13. beginerHacker

    beginerHacker New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2009
    Сообщения:
    30
    Spa
    У меня проблема заключалась в следующем:
    как говориться в справочники lParam -это структура данных. 31 бит = 0 значит клавиша нажата, если 1 - то отжата.
    Почему то на кейдовн и на кей уп она равнялась 1. Т.е. не изменялась.
    И тут я встал в тупик.....Потому просил помощи.
     
  14. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    beginerHacker
    Ну так вопрос бы так и задавали, а то одни !!!!!!!!!!!! и "помогите", сами понимаете какое впечатление это оставляет, надо четко задачу/проблемы пути по которым вы ее пробовали решить вот и все. Просто такие и подобные вопросы, на самом деле не редкость, и всем уже приелись, поэтому чем больше вы сначала поищете в гугле, попробуете сами, и чем конкретней поставите проблему, тем больше вероятность что вам ответят (или хотя бы попытаются).
     
  15. beginerHacker

    beginerHacker New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2009
    Сообщения:
    30
    Spa
    Спасибо большое!!!!!!!
    Буду знать!!!!!!!!!
    Я не любитель форумов, и тут только по необходимости.