В своей проге, хочу отлавливать всю активность с клавиатуры.
Сделал хук на клаву с функцией фильтром. Если я не ошибаюсь, через эту функцию проходят
WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP, WM_SYSKEYDOWN и WM_CHAR. А мне надо только обрабатывать
сообщение WM_CHAR. Как его отличить от других сообщений?
Здравствуйте, MaelStrom, Вы писали:
MS>В своей проге, хочу отлавливать всю активность с клавиатуры. MS>Сделал хук на клаву с функцией фильтром. Если я не ошибаюсь, через эту функцию проходят MS>WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP, WM_SYSKEYDOWN и WM_CHAR. А мне надо только обрабатывать MS>сообщение WM_CHAR. Как его отличить от других сообщений?
В SetWindowsHookEx надо указать тип функции перехвата сообщений WH_KEYBOARD_LL,
тогда callback-функция на которую передаваеться указатель в SetWindowsHookEx, имеет следующий прототип:
LRESULT CALLBACK LowLevelKeyboardProc( int code, WPARAM wParam, LPARAM lParam )- где wParam — идентификатор сообщения.
Надо поставить хук не на WH_KEYBOARD, а на WH_GETMESSAGE... Будут перехватываться все сообщения, включая WM_CHAR... Ну а далее, ясное дело, фильтровать WM_CHAR (в GetMsgProc lParam будет указателем на структуру MSG)
P.S. Разумнее было бы задать этот вопрос в группу WINAPI
Здравствуйте, MaelStrom, Вы писали:
MS>В своей проге, хочу отлавливать всю активность с клавиатуры. MS>Сделал хук на клаву с функцией фильтром. Если я не ошибаюсь, через эту функцию проходят MS>WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP, WM_SYSKEYDOWN и WM_CHAR. А мне надо только обрабатывать MS>сообщение WM_CHAR. Как его отличить от других сообщений?
Помимо того, что данная функция работает тока в NT-подобные системах (в наши дни это мелочь), у нее есть еще один недостаток:
wParam
[in] Specifies the identifier of the keyboard message. This parameter can be one of the following messages: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP.
т.е. вожделенного WM_CHAR тут нет... Видимо, мое решение (описанное в соседнем сообщении), единсвенное (или не единсвенное) верное!
Здравствуйте, VladGal, Вы писали:
VG>Здравствуйте, MaelStrom, Вы писали:
MS>>В своей проге, хочу отлавливать всю активность с клавиатуры. MS>>Сделал хук на клаву с функцией фильтром. Если я не ошибаюсь, через эту функцию проходят MS>>WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP, WM_SYSKEYDOWN и WM_CHAR. А мне надо только обрабатывать MS>>сообщение WM_CHAR. Как его отличить от других сообщений? VG>В SetWindowsHookEx надо указать тип функции перехвата сообщений WH_KEYBOARD_LL, VG>тогда callback-функция на которую передаваеться указатель в SetWindowsHookEx, имеет следующий прототип: VG>LRESULT CALLBACK LowLevelKeyboardProc( int code, WPARAM wParam, LPARAM lParam )- где wParam — идентификатор сообщения.
Здравствуйте, Nazik, Вы писали:
N>Помимо того, что данная функция работает тока в NT-подобные системах (в наши дни это мелочь), у нее есть еще один недостаток:
N>
N>wParam
N>[in] Specifies the identifier of the keyboard message. This parameter can be one of the following messages: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP.
N>т.е. вожделенного WM_CHAR тут нет... Видимо, мое решение (описанное в соседнем сообщении), единсвенное (или не единсвенное) верное!
WM_KEYDOWN + флаг предыдущего состояния клавиши (в lParam) == WM_CHAR?
Здравствуйте, Nazik, Вы писали:
N>Помимо того, что данная функция работает тока в NT-подобные системах (в наши дни это мелочь), у нее есть еще один недостаток:
N>
N>wParam
N>[in] Specifies the identifier of the keyboard message. This parameter can be one of the following messages: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP.
N>т.е. вожделенного WM_CHAR тут нет... Видимо, мое решение (описанное в соседнем сообщении), единсвенное (или не единсвенное) верное!
WM_KEYUP + Код предыдущего состояния клавиши (в lParam) == WM_CHAR?
The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_CHAR message contains the character code of the key that was pressed.
Здравствуйте, VladGal, Вы писали:
VG>Здравствуйте, Nazik, Вы писали:
N>>Помимо того, что данная функция работает тока в NT-подобные системах (в наши дни это мелочь), у нее есть еще один недостаток:
N>>
N>>wParam
N>>[in] Specifies the identifier of the keyboard message. This parameter can be one of the following messages: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP.
N>>т.е. вожделенного WM_CHAR тут нет... Видимо, мое решение (описанное в соседнем сообщении), единсвенное (или не единсвенное) верное! VG>WM_KEYUP + Код предыдущего состояния клавиши (в lParam) == WM_CHAR?
Re: Вопрос по Хукам в Win32.
От:
Аноним
Дата:
07.08.05 16:42
Оценка:
Все сделал через WH_GETMESSAGE. Когда набираешь текст в блокноте, все нормально,
а в ворде все символы четверятся и восьмерятся