Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Как отловить нажатие нескольких клавиш?

Поиск:
Есть такая функция под названием GetKeyboardState. Вот что о ней написано в MSDN:
Цитата
GetKeyboardState
The GetKeyboardState function copies the status of the 256 virtual keys to the specified buffer.

BOOL GetKeyboardState(
  PBYTE lpKeyState  // pointer to array to receive status data
);

Parameters
lpKeyState
Pointer to the 256-byte array that will receive the status data for each virtual key.
Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, callGetLastError.

Remarks
An application can call this function to retrieve the current status of all the virtual keys. The status changes as a thread removes keyboard messages from its message queue. The status does not change as keyboard messages are posted to the thread's message queue, nor does it change as keyboard messages are posted to or retrieved from message queues of other threads. (Exception: Threads that are connected viaAttachThreadInput share the same keyboard state.)

When the function returns, each member of the array pointed to by the lpKeyState parameter contains status data for a virtual key. If the high-order bit is 1, the key is down; otherwise, it is up. If the low-order bit is 1, the key is toggled. A key, such as the caps lock key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.

To retrieve status information for an individual key, use the GetKeyState function. To retrieve the current state for an individual key regardless of whether the corresponding keyboard message has been retrieved from the message queue, use the GetAsyncKeyState function

An application can use the virtual-key code constants VK_SHIFT, VK_CONTROL and VK_MENU as indices into the array pointed to by lpKeyState. This gives the status of the shift, ctrl, or alt keys without distinguishing between left and right. An application can also use the following virtual-key code constants as indices to distinguish between the left and right instances of those keys.

VK_LSHIFT VK_RSHIFT
VK_LCONTROL VK_RCONTROL
VK_LMENU VK_RMENU

These left- and right-distinguishing constants are available to an application only through the GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey functions.

QuickInfo
  Windows NT: Requires version 3.1 or later.
  Windows: Requires Windows 95 or later.
  Windows CE: Unsupported.
  Header: Declared in winuser.h.
  Import Library: Use user32.lib.

See Also
Keyboard Input Overview, Keyboard Input Functions, GetKeyState, GetAsyncKeyState, MapVirtualKey, SetKeyboardState

Таким образом тебе надо сделать что-то по типа:
Код
Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long

Const VK_CAPITAL = &H14

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim keys(0 To 255) As Byte
Dim CapsLockState As Boolean
GetKeyboardState keys(0)
CapsLockState = keys(VK_CAPITAL) ' нажат ли shift
...

или например для того чтобы узнать нажаты ли одновременно циферки 0 и 1:
Код
Option Explicit

Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long

Const VK_0 = &H30
Const VK_1 = &H31

Private Sub Form_KeyPress(KeyAscii As Integer)
Dim keys(0 To 255) As Byte
Dim CapsLockState As Boolean
GetKeyboardState keys(0)
If (keys(VK_0) And keys(VK_1)) Then MsgBox "Вот они!"
End Sub

А на сайте www.mtsecurity.narod.ru я наткнулся на полный список кодов виртуальных клавиш. Вон он:
Цитата
Включают в себя коды виртуальных клавиш клавиатуры, а также "виртуальные" элементы типа трех кнопок мыши. Виртуальные клавиши также включают в себя такие "клавиши", которых обычно не существуют вообще! Код виртуальной клавиши не изменяется, когда нажаты клавиши- модификаторы (Ctrl, Alt, Shift, и т.д.) Например,клавиша 1 имеет тот же самый код виртуальной клавиши-нажата ли 1 или ! Однако, цифры на цифровой клавиатуре имеют два различных кода виртуальной клавиши: один, когда Num Lock включен, и другой когда Num Lock выключен. Обратите внимание, что коды виртуальной клавиши 0-9 и A-Z равняются их кодам ASCII.

Примечание: Фактические значения некоторых из кодов клавиш могут различаться на клавиатуре, предназначенной для различных языков. Особенно, VK_OEM_*, которым обозначают клавишу пунктуации. Значения, перечисленные ниже - для Американской клавиатуры.

Виртуальные коды клавиш

VK_LBUTTON = &H1
Левая кнопка мыши
VK_RBUTTON = &H2
Правая кнопка мыши
VK_CANCEL = &H3
Виртуальная клавиша Отмены, используемая для обработки комбинации клавиш Control-Break
VK_MBUTTON = &H4
Средняя кнопка мыши
VK_BACK = &H8
Backspace
VK_TAB = &H9
Tab
VK_CLEAR = &HC
5 (на цифровой клавиатуре без Num Lock)
VK_RETURN = &HD
Enter
VK_SHIFT = &H10
Shift (любая)
VK_CONTROL = &H11
Ctrl (любая)
VK_MENU = &H12
Alt (любая)
VK_PAUSE = &H13
Pause
VK_CAPITAL = &H14
Caps Lock
VK_ESCAPE = &H1B
Esc
VK_SPACE = &H20
Spacebar
VK_PRIOR = &H21
Page Up
VK_NEXT = &H22
Page Down
VK_END = &H23
End
VK_HOME = &H24
Home
VK_LEFT = &H25
Стрелка влево
VK_UP = &H26
Стрелка вверх
VK_RIGHT = &H27
Стрелка вправо
VK_DOWN = &H28
Стрелка вниз
VK_SELECT = &H29
Select
VK_PRINT = &H2A
Print (используемый только Nokia-клавиатурой)
VK_EXECUTE = &H2B
Execute (не используется)
VK_SNAPSHOT = &H2C
Print Screen
VK_INSERT = &H2D
Insert
VK_DELETE = &H2E
Delete
VK_HELP = &H2F
Help
VK_0 = &H30
0
VK_1 = &H31
1
VK_2 = &H32
2
VK_3 = &H33
3
VK_4 = &H34
4
VK_5 = &H35
5
VK_6 = &H36
6
VK_7 = &H37
7
VK_8 = &H38
8
VK_9 = &H39
9
VK_A = &H41
A
VK_B = &H42
B
VK_C = &H43
C
VK_D = &H44
D
VK_E = &H45
E
VK_F = &H46
F
VK_G = &H47
G
VK_H = &H48
H
VK_I = &H49
I
VK_J = &H4A
J
VK_K = &H4B
K
VK_L = &H4C
L
VK_M = &H4D
M
VK_N = &H4E
N
VK_O = &H4E
O
VK_P = &H50
P
VK_Q = &H51
Q
VK_R = &H52
R
VK_S = &H53
S
VK_T = &H54
T
VK_U = &H55
U
VK_V = &H56
V
VK_W = &H57
W
VK_X = &H58
X
VK_Y = &H59
Y
VK_Z = &H5A
Z
VK_STARTKEY = &H5B
Start Menu
VK_CONTEXTKEY = &H5D
Context Menu
VK_NUMPAD0 = &H60
0 (с Num Lock)
VK_NUMPAD1 = &H61
1 (с Num Lock)
VK_NUMPAD2 = &H62
2 (с Num Lock)
VK_NUMPAD3 = &H63
3 (с with Num Lock)
VK_NUMPAD4 = &H64
4 (с with Num Lock)
VK_NUMPAD5 = &H65
5 (с Num Lock)
VK_NUMPAD6 = &H66
6 (с Num Lock)
VK_NUMPAD7 = &H67
7 (с Num Lock)
VK_NUMPAD8 = &H68
8 (с Num Lock)
VK_NUMPAD9 = &H69
9 (с with Num Lock)
VK_MULTIPLY = &H6A
* (цифровая клавиатура)
VK_ADD = &H6B
+ (цифровая клавиатура)
VK_SEPARATER = &H6C
Separator (never generated by the keyboard)
VK_DECIMAL = &H6E
. (с Num Lock)
VK_DIVIDE = &H6F
/ (цифровая клавиатура)
VK_F1 = &H70
F1
VK_F2 = &H71
F2
VK_F3 = &H72
F3
VK_F4 = &H73
F4
VK_F5 = &H74
F5
VK_F6 = &H75
F6
VK_F7 = &H76
F7
VK_F8 = &H77
F8
VK_F9 = &H78
F9
VK_F10 = &H79
F10
VK_F11 = &H7A
F11
VK_F12 = &H7B
F12
VK_F13 = &H7C
F13
VK_F14 = &H7D
F14
VK_F15 = &H7E
F15
VK_F16 = &H7F
F16
VK_F17 = &H80
F17
VK_F18 = &H81
F18
VK_F19 = &H82
F19
VK_F20 = &H83
F20
VK_F21 = &H84
F21
VK_F22 = &H85
F22
VK_F23 = &H86
F23
VK_F24 = &H87
F24
VK_NUMLOCK = &H90
Num Lock
VK_OEM_SCROLL = &H91
Scroll Lock
VK_OEM_1 = &HBA
;
VK_OEM_PLUS = &HBB
=
VK_OEM_COMMA = &HBC
,
VK_OEM_MINUS = &HBD
-
VK_OEM_PERIOD = &HBE
.
VK_OEM_2 = &HBF
/
VK_OEM_3 = &HC0
`
VK_OEM_4 = &HDB
[
VK_OEM_5 = &HDC
\
VK_OEM_6 = &HDD
]
VK_OEM_7 = &HDE
'
VK_OEM_8 = &HDF
(unknown)
VK_ICO_F17 = &HE0
F17 на Olivetti расширенной клавиатуре (внутреннее использование только)
VK_ICO_F18 = &HE1
F18 на Olivetti расширенной клавиатуре (внутреннее использование только)
VK_OEM_102 = &HE2
< or | on IBM-compatible 102 enhanced non-U.S. keyboard
VK_ICO_HELP = &HE3
Help на Olivetti расширенной клавиатуре (внутреннее использование только)
VK_ICO_00 = &HE4
00 на Olivetti расширенной клавиатуре (внутреннее использование только)
VK_ICO_CLEAR = &HE6
Clear на Olivetti расширенной клавиатуре (внутреннее использование только)
VK_OEM_RESET = &HE9
Reset (Nokia keyboards only)
VK_OEM_JUMP = &HEA
Jump (Nokia keyboards only)
VK_OEM_PA1 = &HEB
PA1 (Nokia keyboards only)
VK_OEM_PA2 = &HEC
PA2 (Nokia keyboards only)
VK_OEM_PA3 = &HED
PA3 (Nokia keyboards only)
VK_OEM_WSCTRL = &HEE
WSCTRL (Nokia keyboards only)
VK_OEM_CUSEL = &HEF
CUSEL (Nokia keyboards only)
VK_OEM_ATTN = &HF0
ATTN (Nokia keyboards only)
VK_OEM_FINNISH = &HF1
FINNISH (Nokia keyboards only)
VK_OEM_COPY = &HF2
COPY (Nokia keyboards only)
VK_OEM_AUTO = &HF3
AUTO (Nokia keyboards only)
VK_OEM_ENLW = &HF4
ENLW (Nokia keyboards only)
VK_OEM_BACKTAB = &HF5
BACKTAB (Nokia keyboards only)
VK_ATTN = &HF6
ATTN
VK_CRSEL = &HF7
CRSEL
VK_EXSEL = &HF8
EXSEL
VK_EREOF = &HF9
EREOF
VK_PLAY = &HFA
PLAY
VK_ZOOM = &HFB
ZOOM
VK_NONAME = &HFC
NONAME
VK_PA1 = &HFD
PA1
VK_OEM_CLEAR = &HFE
CLEAR

Коды используются в:
GetAsyncKeyState, GetKeyboardState, GetKeyState, keybd_event, KEYBDINPUT, SetKeyboardState
Автор: cardinal
Сайт: http://






Просмотров: 3545

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную