Как отловить нажатие клавиш на клавиатуре?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Как отловить нажатие клавиш на клавиатуре?

Сообщение ANDLL » 08.01.2007 (Пн) 23:32

Последнее слово ключевое.
Скажем, мне надо ловить то что нажали на клавиатуре, при этом не поймать то, что пошлет какой-нибудь keybd_event.
Кроме того, будет еще совсем хорошо иметь возможность фильтровать эти нажатия, то есть часть - пропускать, а часть - нет.
Полагаю, можно как-то с помощью DirectX, но как - не знаю.
Желательно из um.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.01.2007 (Вт) 6:53

Дык это,
MSDN писал(а):The keyboard driver's interrupt handler calls the keybd_event function.


Ну и ещё
MSDN писал(а):The SendInput function does not reset the keyboard's current state. Therefore, if the user has any keys pressed when you call this function, they might interfere with the events that this function generates. If you are concerned about possible interference, check the keyboard's state with the GetAsyncKeyState function and correct as necessary.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 09.01.2007 (Вт) 11:03

The keyboard driver's interrupt handler calls the keybd_event function
Неправда. По крайней мере не он вызывает не только keybd_event, но еще и особым образом обрабатывает Win+L и Ctrl+Alt+Del
GetAsyncKeyState это... Ведь при большой загрузки процессора может не давать правильных результатов?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.01.2007 (Вт) 11:11

ANDLL писал(а):Неправда. По крайней мере не он вызывает не только keybd_event, но еще и особым образом обрабатывает Win+L и Ctrl+Alt+Del

А мне кажется, драйверу глубоко фиолетово, что нажато, а особым образом обрабатывает система, когда сообщение от драйвера попадает в системную очередь сообщений, до передачи потоку...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 09.01.2007 (Вт) 11:25

GSerg, это какие-то чисто философские измышления.
Нажатие Ctrl+Alt+Del вовсе не посылает какому-то окну сообщение WM_KEYDOWN. Оно отсеивается где-то в ядерном режиме, а уже делает это обработчик прерывания или еще какая процедура я не знаю.
Разве не так?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 09.01.2007 (Вт) 11:28

В любом случае, Ctrl+Alt+Del посланного keybd_event система отличит от Ctrl+Alt+Del, нажатого на клаве
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 77

    TopList