Особенности перехвата сообщений клавиатуры

Тема в разделе "WASM.BEGINNERS", создана пользователем Scandium, 8 сен 2005.

Статус темы:
Закрыта.
  1. Scandium

    Scandium New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2005
    Сообщения:
    3
    Адрес:
    Ukraine
    Помогите, пожалуйста, кто знает.



    Навешиваю хук на сообщения клавиатуры (invoke SetWindowsHookEx,WH_KEYBOARD,ADDR HookProced,hInstance,NULL). В хук-процедуре HookProced кроме всего прочего содержатся две API-функции: MessageBeep и CreateFile. Так вот, MessageBeep работает при каждом нажатии клавиши, какое-бы окно не было активно, а CreateFile - только когда активно окно моей программы. Почему функции типа CreateFile и _lcreate не выполняются при переключении на чужие окна???? (кстати, если в SetWindowsHookEx вместо hInstance поставить NULL - она вообще не выполняется, хотя я видел массу примеров именно с таким описанием).

    Процедуры установки хука и HookProced находятся в dll-ке.

    Windows XP.



    Заранее благодарен.
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Scandium

    В чем выражается "не работает" применительно к CreateFile?

    Пробовал WH_KEYBOARD_LL?
     
  3. Scandium

    Scandium New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2005
    Сообщения:
    3
    Адрес:
    Ukraine
    Не обновляется файл, время создания не меняется (а когда активно окно моей программы - меняется). Я вот вчера прикинул, что, может быть, теряется значение параметра Filename этой функции в .data-сегменте dll-ки и слинковал ее с "section:.data,S", как это приведено у lczelion'а,- все равно не работает.



    WH_KEYBOARD_LL пока не пробовал.
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Scandium

    Не обновляется файл ...

    Это не ответ.

    Происходит ли вызов функции, если да, то завершается ли он успешно (если нет, то что возвращает GetLastError), происходит ли запись в файл и т.д.
     
  5. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    Если секция data? помечена .bss /S как разделяемая, видна везде, то DllEntry не должна ничего писать в data?, иначе данные не будут общие.

    Почему не разбирался, нашел тыком.
     
  6. Scandium

    Scandium New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2005
    Сообщения:
    3
    Адрес:
    Ukraine
    Все... Заработало!!!!!

    Дело действительно было в "section:.data,S".

    Всем спасибо.
     
Статус темы:
Закрыта.