Страница: 1 |
Страница: 1 |
Вопрос: Детектор нажатия клавиш
Добавлено: 24.10.09 00:58
Автор вопроса: Winand | Web-сайт:
Подскажите способ задетектить нажатие любой клавиши на клавиатуре. GetKeyboardState как-то уныло работает и только если моя программа в фокусе. Проблема в том что, когда я мигаю диодами на клаве с помощью DeviceIoControl, сама клава глючит (возможно только у меня одного, но мне не легче) - то не печатает букву, то печатает две подряд. Хочу прекращать мигания, если какая-то клавиша нажата. Так-то.
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #1
Добавлено: 24.10.09 01:26
хук WH_KEYBOARD_LL ставится где хошь
Номер ответа: 2
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #2
Добавлено: 24.10.09 13:46
жаль, если без хука никуда, но я попробую
Номер ответа: 3
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #3
Добавлено: 24.10.09 13:54
А чем тебя не устраивает хук?
Номер ответа: 4
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #4
Добавлено: 24.10.09 19:01
устраивает. Просто не люблю хуки) хотя без них сложно обойтись
Это применимо для хука клавиатуры? http://www.vbnet.ru/forum/show.aspx?id=63710
Номер ответа: 5
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #5
Добавлено: 25.10.09 23:28
есть что-то менее крутое, чем WH_KEYBOARD_LL? может WH_KEYBOARD? Я хочу просто мониторить нажатия, без вмешательства. Думаю такой лоу-левел хук может вредительски сказываться на производительности (пусть это и не заметно на современных машинах)
Номер ответа: 6
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #6
Добавлено: 25.10.09 23:45
ну или может WH_JOURNALRECORD? WH_KEYBOARD не подойдет, потому что он не глобален.
Номер ответа: 7
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #7
Добавлено: 26.10.09 00:14
Да с чего ты взял про вредительство если система (как я понимаю) сама на нем работает, ты просто поставишь свой хук перед всеми остальными вот и все. Причем если ты не успеешь обработать вызов, то система сама пошлет тебя куда подальше и передаст управление следующему хуку
WH_KEYBOARD может быть глобальным, последний параметр в 0, но вызывающий модуль отражается в адресное пространство всех процессов, поэтому это должен быть Native DLL ( по крайней мере с ним проблем мало). Но собственно мне кажется этот хук и должен больше ресурсов трогать, так как хук ставится в очередь сообщений каждого процесса (хотя не уверен).
Ну а WH_JOURNALRECORD тебе точно не нужен, тебе ведь только первое нажатие отследить нужно.
Номер ответа: 8
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #8
Добавлено: 26.10.09 00:28
ну ок. Значит WH_KEYBOARD_LL. И не буду парить себе мозг.. хотя всё ради этого в сущности)
UPD: погодите-ка секундочку. А как я определю нажата ли любая клавиша? Это что ж надо запоминать все нажатия и отжатия, и по ним вычислять?
Номер ответа: 9
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #9
Добавлено: 26.10.09 02:34
Не пойму в чем у тебя проблема
Код в модуле, timer1 на форме - это твои мигающие лампочки
Номер ответа: 10
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #10
Добавлено: 26.10.09 20:34
нажали кнопку1, затем нажали кнопку2. kproc вызвался 2 раза. Отжали кнопку1. снова вызвался kproc. Отжали кнопку2. еще раз kproc. Теперь можно мигать.
То есть мне надо помнить число нажатых кнопок и вычитать из него отжатые. Когда это всё равно 0, тогда можно мигать.
Проблем нет.
Номер ответа: 11
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #11
Добавлено: 29.10.09 10:49
Я писал пример хука клавы. Ищи в примерах, там есть точно. С исходниками на ВБ и асме
Номер ответа: 12
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #12
Добавлено: 29.10.09 14:39
Executioner, ну а что там писать-то. Хук, Анхук и коллбэк-функция. я уже нашел пример и сделал.