Глобальный хук на клавиатуру

Тема в разделе "WASM.WIN32", создана пользователем Mr_Jack, 26 май 2008.

  1. Mr_Jack

    Mr_Jack New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    2
    Проблема такая: поставил хук WH_KEYBOARD_LL. Всё хорошо работает, но я не знаю как правильно разименовать lParam процедуры хука, чтобы дальше записать скан-код в файл. Как это сделать?

    Код (Text):
    1. .data
    2. EOLN            DB 13, 10, 0
    3.  
    4. .code
    5. HookProc proc nCode:DWORD, wParam:DWORD, lParam:DWORD
    6.  
    7.     .if nCode<0
    8.         invoke CallNextHookEx, NULL, nCode, wParam, lParam
    9.         ret
    10.     .elseif nCode == HC_ACTION
    11.  
    12.         ; записать в lpBuffer скан-код
    13.  
    14.         mov eax, 0
    15.         ret
    16.     .endif
    17.  
    18. HookProc endp
     
  2. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Как-как...lParam у тебя указывает на структуру KBDLLHOOKSTRUCT
    Код (Text):
    1. typedef struct {
    2.     DWORD vkCode;
    3.     DWORD scanCode;
    4.     DWORD flags;
    5.     DWORD time;
    6.     ULONG_PTR dwExtraInfo;
    7. } KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
    Соответсвенно, lParam+4 у тебя будет указывать на скан-код клавиши (dword). Помоему, все просто :\

    Т.е. делаем так
    mov eax,lParam
    mov eax,dword ptr [eax+4] ; теперь в еах - скан код.
     
  3. Mr_Jack

    Mr_Jack New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    2
    Спасибо Aspire. Я тоже думал что то наподобие этого, но не знал как кастовать)