| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Глобальный хук |
| Автор: Poseidon 27.12.2005, 19:31 | ||
Я тут порылся по форуму и нашел код Рауса
|
| Автор: JoyEx 27.12.2005, 20:12 |
| Смотрите MSDN: SetWindowsHookEx Hook Scope WH_KEYBOARD_LL Global only Значит без длл не обойтись |
| Автор: Poseidon 27.12.2005, 20:23 | ||
JoyEx, но ведь одну клавишу отловить можно и без dll... |
| Автор: JoyEx 27.12.2005, 22:29 |
| Poseidon Это смотря где ловить, если в своём процессе, то тогда можно и без длл |
| Автор: Poseidon 27.12.2005, 22:37 |
| JoyEx, посмотри код, каторый я привел выше. Ловит клавишу во всех процессах и без dll. Вот только жаль, что одну клавишу... |
| Автор: JoyEx 27.12.2005, 22:48 | ||
hInstance - это ведь базовый адрес длл для WH_KEYBOARD_LL. Или нет? |
| Автор: Albinos_x 27.12.2005, 22:50 |
| по идее клава также генерирует код... я так понимаю ты хочешь отловить Шифт и альт...? нада по экспериментировать с возвращаемыми значениями... при зажатой какой-нибудь из этих клавиш один из возвращёных байтов должен иметь приблизительно такой формат: бит - клавиша 0 - нажата правая шифт 1 - нажата левая шифт 2 - нажата Ctrl 3 - нажата Alt 4 - нажата scroll lock 5 - нажата num lock 6 - нажата caps lock 7 - нажата insert т.е. к примеру байт равный 32 ($20)(00100000) - соответствует, что включён num lock из всех выше перечисленных. |
| Автор: Poseidon 27.12.2005, 23:18 | ||
|
| Автор: p0s0l 27.12.2005, 23:30 |
| Если нажать одновременно 3 кнопки, сгенерится 3 WM_KEYDOWN'а... Когда отпустишь кнопки - сгенерится 3 WM_KEYUP'а... Что еще нужно - не понятно... Объясни конкретно, что ты хочешь и в каком виде ? Ты хочешь, чтобы одним WM_KEYDOWN'ом тебе сообщили, что нажалось 50 кнопок ? И также, то что для тебя кажется "одновременным" на самом деле отнюдь не одновременно... |
| Автор: Albinos_x 27.12.2005, 23:40 |
| как вариант, можно попробовать установить типа задержки длительностью допустим 250 мс во время задержки считывать нажатые клавиши в строку, а потом уже анализировать, если несколько символов и они отличаются, то зажаты несколько клавиш... |
| Автор: p0s0l 27.12.2005, 23:44 |
| В WM_KEYDOWN ставим флажок в массиве, в WM_KEYUP убираем, потом можно по массиву определить сколько и какие кнопки зажаты... Либо проще и надежнее GeyKeyboardState. Или если нужно проверить нажатие определенных кнопок - GetKeyState... |
| Автор: Albinos_x 28.12.2005, 00:12 | ||||
вот приблизительно так:
только в этом коде (не до конца разобрался) глюк с удалением повторных символов (когда долго зажата клавиша) |
| Автор: Albinos_x 28.12.2005, 00:24 |
| да... ещё... не разобрался пока до конца... почему то иногда лишние симолы вылетают... которые не зажаты..возможно из-за того что после удаления строк (после выхода из цикла) не определяю снова длину строки... |
| Автор: Poseidon 28.12.2005, 18:25 | ||||
Спасибо p0s0l PS. Albinos_x, если честно, то твой вариант с таймором мягко говоря .... |
| Автор: Albinos_x 28.12.2005, 19:11 | ||
знаю... PS: в этот раз колесо получилось прямоугольным |