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

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

10.09.2012, 19:37. Показов 3608. Ответов 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
18033 / 7736 / 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
779 / 296 / 17
Регистрация: 21.01.2023
Сообщений: 490
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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
17.04.2023, 20:38
Mikle Quits, это не будет работать если приложение неактивно.
0
 Аватар для Mikle Quits
779 / 296 / 17
Регистрация: 21.01.2023
Сообщений: 490
17.04.2023, 20:49
The trick, конечно. Но речь то, вроде, идёт о написании игры. Она должна реагировать на клавиши, когда неактивна?
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru