![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Я тут порылся по форуму и нашел код Рауса
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 1 Всего: 12 |
Смотрите MSDN:
SetWindowsHookEx Hook Scope WH_KEYBOARD_LL Global only Значит без длл не обойтись -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
JoyEx, но ведь одну клавишу отловить можно и без dll... -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 1 Всего: 12 |
Poseidon
Это смотря где ловить, если в своём процессе, то тогда можно и без длл -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
JoyEx, посмотри код, каторый я привел выше. Ловит клавишу во всех процессах и без dll. Вот только жаль, что одну клавишу...
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 1 Всего: 12 |
hInstance - это ведь базовый адрес длл для WH_KEYBOARD_LL. Или нет? -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 3 Всего: 108 |
по идее клава также генерирует код... я так понимаю ты хочешь отловить Шифт и альт...?
нада по экспериментировать с возвращаемыми значениями... при зажатой какой-нибудь из этих клавиш один из возвращёных байтов должен иметь приблизительно такой формат: бит - клавиша 0 - нажата правая шифт 1 - нажата левая шифт 2 - нажата Ctrl 3 - нажата Alt 4 - нажата scroll lock 5 - нажата num lock 6 - нажата caps lock 7 - нажата insert т.е. к примеру байт равный 32 ($20)(00100000) - соответствует, что включён num lock из всех выше перечисленных. -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
Если нажать одновременно 3 кнопки, сгенерится 3 WM_KEYDOWN'а... Когда отпустишь кнопки - сгенерится 3 WM_KEYUP'а... Что еще нужно - не понятно...
Объясни конкретно, что ты хочешь и в каком виде ? Ты хочешь, чтобы одним WM_KEYDOWN'ом тебе сообщили, что нажалось 50 кнопок ? И также, то что для тебя кажется "одновременным" на самом деле отнюдь не одновременно... Это сообщение отредактировал(а) p0s0l - 27.12.2005, 23:35 -------------------- С уважением, г-н Посол. |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 3 Всего: 108 |
как вариант, можно попробовать установить типа задержки длительностью допустим 250 мс во время задержки считывать нажатые клавиши в строку, а потом уже анализировать, если несколько символов и они отличаются, то зажаты несколько клавиш...
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
В WM_KEYDOWN ставим флажок в массиве, в WM_KEYUP убираем, потом можно по массиву определить сколько и какие кнопки зажаты...
Либо проще и надежнее GeyKeyboardState. Или если нужно проверить нажатие определенных кнопок - GetKeyState... Это сообщение отредактировал(а) p0s0l - 27.12.2005, 23:46 -------------------- С уважением, г-н Посол. |
|||
|
||||
| Albinos_x |
|
||||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 3 Всего: 108 |
вот приблизительно так:
только в этом коде (не до конца разобрался) глюк с удалением повторных символов (когда долго зажата клавиша) -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
||||
|
|||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 3 Всего: 108 |
да... ещё... не разобрался пока до конца... почему то иногда лишние симолы вылетают... которые не зажаты..возможно из-за того что после удаления строк (после выхода из цикла) не определяю снова длину строки...
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Спасибо p0s0l PS. Albinos_x, если честно, то твой вариант с таймором мягко говоря .... Это сообщение отредактировал(а) Poseidon - 28.12.2005, 18:27 -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 3 Всего: 108 |
знаю... PS: в этот раз колесо получилось прямоугольным Это сообщение отредактировал(а) Albinos_x - 28.12.2005, 23:49 -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |