| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Перехват нажатий на клавиатуру |
| Автор: ProgramerForever 29.4.2008, 06:17 |
| Нужно, чтобы при нажатии на "~" вызывалась форма методом Show. Проблема в том, что на исходной форме очень-очень много элементов управления, и для каждого писать обработчик - неразумно и нерационально. Может есть способ?? |
| Автор: voltaren 29.4.2008, 12:04 | ||||
Есть метод это сделать средствами WinAPI и Timer
Поидее код можно получить с помощью Asc("~") только для тильды не работает а для букв работает, надо просто подобрать Есть конечно еще метод, через Хуки это сделать но он сложнее |
| Автор: ProgramerForever 29.4.2008, 12:37 | ||||
| Я понял, что последний вариант перехватывает клавиши отовсюду. А можно ли перехватывать с помощью API нажатия в активном окне? А зачем эта строка?
Ещё: Я потестил код. Он срабатывает n раз в секунду. А как обрабатывать ОДНО, КАЖДОЕ нажатие? Как я догадываюсь, с помощью хуков? Тех самых, которые
|
| Автор: Insect 29.4.2008, 12:52 | ||
можно отфильтровывать ненужное опять таки с использованием API функции (GetActiveWindow вроде как называецца) |
| Автор: voltaren 29.4.2008, 12:58 |
| Insect прав с помощью функции GetActiveWindow проверять какое окно активное не понял что вы имели ввиду под этой фразой "А как обрабатывать ОДНО, КАЖДОЕ нажатие?" ? |
| Автор: ProgramerForever 29.4.2008, 14:28 |
| Типа кейлоггера (но мне не для этого |
| Автор: Insect 29.4.2008, 15:01 |
| ProgramerForever, тагда фильтр по хэндлу |
| Автор: ProgramerForever 29.4.2008, 15:08 | ||
Пробуй код, сразу поймёшь о чём я. мне надо не 100 раз в секунду, а один раз. |
| Автор: voltaren 29.4.2008, 20:18 |
| а в чем проблема таймера надо поставить так что бы раз в секунду работал! Или например добавить переменную типа Boolean когда клавиша нажимается первый раз она становиться True и больше не срабатывает даже если клавиша нажата когда клавишу отпускаешь то переменная сбрасывается в False |
| Автор: Insect 30.4.2008, 08:38 |
| ProgramerForever, ну других способов не знаю... А чем тебя этот не устраивает? Боишься умыкнуть у винды лишний таймер? P.S. В BlitzBasic' е (специальный бейсик для быстрого написания игр) имеется такая функция как IfKeyHit(#код#)... Но использовать приложение, созданное на нём специально для твоей задачи, не выгодно- экзэшник минимум 800 Кб делает да и не факт что получиццо... |
| Автор: ProgramerForever 30.4.2008, 10:49 | ||
Я обдумывал такой вариант, всё хорошо, но.. Как это реализовать?? |
| Автор: JusTalionis 1.5.2008, 16:36 |
| Я обычно отслеживал время: после того как частота автоповтора прекратилась - значит отпущена клавиша. Собственно, это время задаст в твоей проге предел: с какой макс скоростью юзеру позволено долбить по этой клавише. |
| Автор: ProgramerForever 1.5.2008, 20:48 |
| Точно! Буду копать в этом направлении. |
| Автор: Rrader 2.5.2008, 07:11 |
| ProgramerForever, держи пример |