С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
3 / 3 / 0
Регистрация: 16.08.2012
Сообщений: 93

Как отловить сочетание клавиш

10.09.2012, 19:37. Показов 3565. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код, показывающий код нажатой клавиши:
Visual Basic
1
2
3
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox (KeyCode)
End Sub
А как сделать, чтобы он выводил две нажатые клавиши (сочетание)? Клавиши должны быть типа вверх+вправо, вверх+влево
Помогите!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2012, 19:37
Ответы с готовыми решениями:

Как заблокировать сочетание Alt+f4 ?
Как заблокироватЬ такое сочетание клавиш?

Как отловить сочетание клавиш
Не могу отловить сочетание двух клавиш, точнее не знаю как. Вот так я ловлю одну клавишу: this.KeyDown += this.Key_Down; ... ...

Хук - как отловить сочетание клавиш?
Долго над этим бьюсь, никак не могу понять, во-первых - lparam меняется только при зажатом Альт, на Шифт и Контрл не реагирует... ...

11
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
10.09.2012, 19:50
А разве стандартная клава выдает сочетание произвольных клавиш? ИМХО сочетания могут быть только с Ctrl, Shift, Alt. Для задания направлений вверх+вправо, вверх+влево и т.д. обычно используют клавиши 9, 7 и т.д. на цифровом блоке.
0
3 / 3 / 0
Регистрация: 16.08.2012
Сообщений: 93
10.09.2012, 19:53  [ТС]
Я просто хочу написать игру-аркаду. Там для прыжка вправо нужно нажать вверх+вправо.
Как и везде.
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
10.09.2012, 21:14
Лучший ответ Сообщение было отмечено как решение

Решение

mltfilm, кинь на форму Timer1 c Interval=1 и пробуй-
Visual Basic
1
2
3
4
5
6
7
8
9
Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
 
Private Sub Timer1_Timer()
If GetAsyncKeyState(vbKeyUp) = -32768 Then Me.Top = Me.Top - 10
If GetAsyncKeyState(vbKeyDown) = -32768 Then Me.Top = Me.Top + 10
If GetAsyncKeyState(vbKeyLeft) = -32768 Then Me.Left = Me.Left - 10
If GetAsyncKeyState(vbKeyRight) = -32768 Then Me.Left = Me.Left + 10
End Sub
3
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.09.2012, 21:26
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от mltfilm Посмотреть сообщение
А как сделать, чтобы он выводил две нажатые клавиши (сочетание)?
Именно так с Form_KeyDown сочетание клавиш не выйдет. Всегда будет возвращаться код какой то одной клавиши в определенный момент времени, даже если зажать обе или больше.
Если требуется одновременно контролировать 2 клавиши, то лучше использовать GetAsyncKeyState
Объявить так:
Visual Basic
1
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Использовать в главном цикле игры, примерно так

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Running = True
Do While Running = True
 
If GetAsyncKeyState(vbKeyEscape) <> 0 Then
Running = False
Unload Me
End If
If GetAsyncKeyState(vbKeyRight) <> 0 Then
' Ваши действия
Debug.Print "Right"
End If
If GetAsyncKeyState(vbKeyLeft) <> 0 Then
' Ваши действия
Debug.Print "Left"
End If
If GetAsyncKeyState(vbKeyUp) <> 0 Then
' Ваши действия
Debug.Print "Up"
End If
 
DoEvents
Loop
Апострофф, опередил! Ну ладно, пусть и моё будет...
4
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
26.05.2014, 22:28
Потом ктонибудь догадается тайно считывать клавиатуру
и пересылать на другой адрес в интерактивном режиме...
а можно ведь в этот момент и пароль вводить...
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.05.2014, 16:01
Казанский, да, умеет.
Где-то на .Net-e с INV.DS радио с такой фишкой делали.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.04.2023, 17:40
GetAsyncKeyState не всегда срабатывает, лучше RegisterHotKey
0
 Аватар для Mikle Quits
762 / 279 / 16
Регистрация: 21.01.2023
Сообщений: 408
17.04.2023, 19:58
Зачем всё это? У меня обычно так, в модуле:
Visual Basic
1
Public Keyb(255) As Boolean
В форме с KeyPreview = True так:
Visual Basic
1
2
3
4
5
6
7
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Keyb(KeyCode) = True
End Sub
 
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
  Keyb(KeyCode) = False
End Sub
Любые сочетания клавиш, которые способна принять клавиатура, я ловлю, исключения - только всякая экзотика, типа "Alt+Ctrl+Del".
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.04.2023, 20:38
Mikle Quits, это не будет работать если приложение неактивно.
0
 Аватар для Mikle Quits
762 / 279 / 16
Регистрация: 21.01.2023
Сообщений: 408
17.04.2023, 20:49
The trick, конечно. Но речь то, вроде, идёт о написании игры. Она должна реагировать на клавиши, когда неактивна?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.04.2023, 21:01
Mikle Quits, просто тут написали что GetAsyncKeyState не всегда срабатывает, а это происходит когда приложение неактивно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.04.2023, 21:01
Помогаю со студенческими работами здесь

OnKey при вводе в поле формы - как отловить сочетание клавиш
Хочу чтобы при вводе данных в поле формы при нажатии Ctrl+Enter форма закрывалась и введенные значения улетали в таблицу. Понатно, что надо...

Отловить сочетание клавиш Ctrl+shift
Нужен код который выводит в командной строке сообщение, что были нажаты клавиши Ctrl+shift. При этом не важно левые или правые.

Как программно послать сочетание клавиш?
НА форме есть MsRdpClient (mstscax.dll) нужно этому компоненту послать сочетание клавиш. как это можно сделать? пробовал всей программе...

Как можно блокировать сочетание клавиш?
Как с помошью Delphi7 можно отключить сочетание клавиш alt+ctrl+delete?

Как сделать сочетание клавиш вверх и влево?
как сделать сочетание клавиш вверх и влево? обработка одной клавиши я знаю if (e.keyCode == 65) knopkaA.y +=2; мне нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru