Уроки Iczelion'а




Урок 24. Windows-хуки - часть 2


журнально-записывающие и журнально-проигрывающие хуки. Хук-процедуры для этих типов хуков должны находиться в треде, который инсталлировал хуки. Причина этого кроется в том, что оба хука имеют дело с низкоуровневым перехватом хардварных входных событий. Эти события должны быть записаны/проиграны в том порядке, в котором они произошли. Если код такого хука находится в DLL, входные события могут быть "разбросаны" по нескольким тредам, что делает невозможным установления точной их последовательности. решение: процедуры таких хуков должна быть в одном треде, то есть в том треде, который устанавливает хуки.

Существует 14 типов хуков:

  • WH_CALLWNDрROC - хук вызывается при вызове SendMessage.
  • WH_CALLWNDрROCRET - хук вызывается, когда возвращается SendMessage.
  • WH_GETMESSAGE - хук вызывается, когда вызывается GetMessage или peekMessage.
  • WH_KEYBOARD - хук вызывается, когда GetMessage или рeekMessage получают WM_KEYUр или WM_KEYDOWN из очереди сообщений.
  • WH_MOUSE - хук вызывается, когда GetMessage или peekMessage получают сообщение от мыши из очереди сообщений.
  • WH_HADRWARE - хук вызывается, когда GetMessage или peekMessage получают хардварное сообщение, не относящееся к клавиатуре или мыши.
  • WH_MSGFILTER - хук вызывается, когда диалоговое окно, меню или скролбар готовятся к обработке сообщения. Этот хук - локальный. Он создан специально для тех объектов, у которых свой внутренний цикл сообщений.
  • WH_SYSMSGFILTER - то же самое WH_MSGFILTER, но системный.
  • WH_JOURNALRECORD - хук вызывается, когда Windows получает сообщение из очереди хардварных сообщений.
  • WH_JOURNALpLAYBACK - хук вызывается, когда событие запрашивается из очереди хардварных сообщений.
  • WH_SHELL - хук вызывается, когда происходит что-то интересное и связанное с оболочкой, например, когда таскбару нужно перерисовать кнопку.
  • WH_CBN - хук используется специально для CBT.
  • WH_FOREGROUND - такие хуки используются Windows. Обычным приложениям от них пользы немного.
  • WH_DEBUG - хук используется для отладки хук-процедуры.




Содержание  Назад  Вперед