Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клавиши, клавиши, клавиши... И ещё немного кнопки... 
:(
    Опции темы
Atomic Angel
Дата 21.9.2004, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 19.11.2003

Репутация: нет
Всего: нет



ЛюДи добрыя, подСкажить пЖалуста:
Нужно обрабатывать нажатия сразу нескольких нажатых клавишь на клаве. Как же это сделать???
И ишо, Хочу работать с USB-джойстиком... КАК?
Со стандартным могу а с USB - никак.
PM MAIL WWW ICQ   Вверх
cardinal
Дата 21.9.2004, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Модератор: Пожалуйста, один топик - один вопрос.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
cardinal
Дата 21.9.2004, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Ответ на первый вопрос.

Есть такая функция под названием 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

Ну а вот тебе значения констант из того же MSDN:
Цитата
Virtual-Key Codes
Introduction
The virtual-key codes provide a hardware- and language-independent method of identifying keyboard keys. Each virtual-key code represents a unique keyboard key and also identifies the purpose of that key. The keyboard driver must provide one or more keyboard layouts that maps keyboard scan codes to the appropriate virtual-key codes.

Required Virtual Keys
The complete virtual-key code set consists of 256 byte values in the range 0 to 255. Most, but not all, of the values used by standard drivers are in the range 0 to 127. There is a loose distinction between "standard" keys, which do not vary much, and "OEM" keys, which do vary from keyboard to keyboard.

For full Windows functionality, a keyboard driver must provide the following virtual keys:

Virtual-key code
Description

VK_0 through VK_9
Number keys (not on numeric keypad): 0 through 9

VK_A through VK_Z
Letter keys: A through Z

VK_BACK
BACKSPACE key

VK_CONTROL
CTRL key

VK_DELETE
DELETE key

VK_DOWN
Down direction key

VK_END
END key

VK_ESCAPE
ESC key

VK_F1 through VK_F10
F1 through F10 keys

VK_HOME
HOME key

VK_INSERT
INSERT key

VK_LEFT
Left direction key

VK_MENU
ALT key

VK_NEXT
PAGE DOWN key

VK_PRIOR
PAGE UP key

VK_RIGHT
Right direction key

VK_SHIFT
Left and right SHIFT keys

VK_SNAPSHOT
PRINTSCREEN key

VK_SPACE
SPACE key

VK_TAB
TAB key

VK_UP
Up direction key

Shift keys must be available in the combinations unshifted, SHIFT, CTRL, and CTRL+ALT.

Most keyboards, the virtual-key codes VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, and VK_NEXT are generated on the numeric keypad only if NUMLOCK is off.

Optional Virtual Keys
If a keyboard has a numeric pad, the numeric keys are frequently used as cursor-control and editing keys if NUMLOCK is off. If NUMLOCK is on, the virtual-key codes VK_NUMPAD0 through VK_NUMPAD9 are used for the digits. Keyboards with a DELETE key that also generates the decimal point (period or comma) use VK_DELETE and VK_DECIMAL to distinguish between the two uses of the key.

Keyboards commonly contain various "lock" keys, such as VK_CAPITAL and VK_NUMLOCK. If a keyboard driver generates ANSI characters on the numeric keypad using ALT + numeric-pad keys, it must do this translation only if NUMLOCK is on. The cursor and editing keys on IBM-compatible keyboards do not produce this translation.

Other keys may vary from keyboard to keyboard. The following set of virtual-key codes is generally used for punctuation keys, accented letter keys, and dead keys in the main section of a keyboard:

VK_OEM_1 ... VK_OEM_8

VK_OEM_102

VK_OEM_PLUS, VK_OEM_MINUS, VK_OEM_COMMA, VK_OEM_PERIOD

If a keyboard has more than 16 function keys, the virtual-key codes in the range VK_F17 through VK_F24 should be used for the extra function keys.

Windows internally generates the mouse-button virtual-key codes VK_LBUTTON, VK_RBUTTON, VK_MBUTTON, and VK_CANCEL. These virtual-key codes are generated internally by Windows and are never generated by keyboard or mouse drivers.

Keyboard drivers should not generate VK_EXECUTE or VK_SEPARATER.

Virtual Keys for 122-Key Keyboards
For keyboards with 122 keys, the mapping for the first 101 keys is the same as described in previous sections.

The function keys F13 through F24 should use VK_F13 through VK_F24.

The remaining keys should be mapped to the following virtual-key codes:

VK_ATTN
VK_OEM_CLEAR

VK_CRSEL
VK_PA1

VK_EREOF
VK_PLAY

VK_EXSEL
VK_ZOOM

VK_NONAME


Virtual-Key Code Definitions
The following table includes the virtual-key codes that are defined for Windows. The key code values 0 and 0FFh are not used.

Virtual-key Codes
Name
Value
Comment

VK_LBUTTON
01h
Left mouse button.

VK_RBUTTON
02h
Right mouse button.

VK_CANCEL
03h
Used for control-break processing.

VK_MBUTTON
04h
Middle mouse button (3-button mouse).



05h through 07h undefined.

VK_BACK
08h


VK_TAB
09h




0Ah and 0Bh undefined.

VK_CLEAR
0Ch


VK_RETURN
0Dh




0Eh and 0Fh undefined.

VK_SHIFT
10h


VK_CONTROL
11h


VK_MENU
12h


VK_PAUSE
13h


VK_CAPITAL
14h




15h through 1Ah undefined.

VK_ESCAPE
1Bh




1Ch through 1Fh undefined.

VK_SPACE
20h


VK_PRIOR
21h
Page up.

VK_NEXT
22h
Page down.

VK_END
23h


VK_HOME
24h


VK_LEFT
25h


VK_UP
26h


VK_RIGHT
27h


VK_DOWN
28h


VK_SELECT
29h


VK_PRINT
2Ah
Only used by Nokia.

VK_EXECUTE
2Bh
Never used.

VK_SNAPSHOT
2Ch
SYSREQ key starting with Windows 3.0.

VK_INSERT
2Dh


VK_DELETE
2Eh


VK_HELP
2Fh


VK_0
30h


VK_1
31h


VK_2
32h


VK_3
33h


VK_4
34h


VK_5
35h


VK_6
36h


VK_7
37h


VK_8
38h


VK_9
39h




3Ah though 40h undefined.

VK_A
41h


VK_B
42h


VK_C
43h


VK_D
44h


VK_E
45h


VK_F
46h


VK_G
47h


VK_H
48h


VK_I
49h


VK_J
4Ah


VK_K
4Bh


VK_L
4Ch


VK_M
4Dh


VK_N
4Eh


VK_O
4Fh


VK_P
50h


VK_Q
51h


VK_R
52h


VK_S
53h


VK_T
54h


VK_U
55h


VK_V
56h


VK_W
57h


VK_X
58h


VK_Y
59h


VK_Z
5Ah




5Bh through 5Fh undefined.

VK_NUMPAD0
60h


VK_NUMPAD1
61h


VK_NUMPAD2
62h


VK_NUMPAD3
63h


VK_NUMPAD4
64h


VK_NUMPAD5
65h


VK_NUMPAD6
66h


VK_NUMPAD7
67h


VK_NUMPAD8
68h


VK_NUMPAD9
69h


VK_MULTIPLY
6Ah


VK_ADD
6Bh


VK_SEPARATER
6Ch
Never generated by keyboard driver.

VK_SUBTRACT
6Dh


VK_DECIMAL
6Eh


VK_DIVIDE
6Fh


VK_F1
70h


VK_F2
71h


VK_F3
72h


VK_F4
73h


VK_F5
74h


VK_F6
75h


VK_F7
76h


VK_F8
77h


VK_F9
78h


VK_F10
79h


VK_F11
7Ah


VK_F12
7Bh


VK_F13
7Ch


VK_F14
7Dh


VK_F15
7Eh


VK_F16
7Fh


VK_F17
80h


VK_F18
81h


VK_F19
82h


VK_F20
83h


VK_F21
84h


VK_F22
85h


VK_F23
86h


VK_F24
87h




88h through 8Fh unassigned.

VK_NUMLOCK
090h
NUMLOCK on all keyboards.

VK_OEM_SCROLL
091h
SCROLL LOCK on all keyboards.



92h through B9h unassigned.

VK_OEM_1
0BAh
Punctuation.

VK_OEM_PLUS
0BBh
Punctuation.

VK_OEM_COMMA
0BCh
Punctuation.

VK_OEM_MINUS
0BDh
Punctuation.

VK_OEM_PERIOD
0BEh
Punctuation.

VK_OEM_2
0BFh
Punctuation.

VK_OEM_3
0C0h
Punctuation.



C1h through DAh unassigned.

VK_OEM_4
0DBh
Punctuation.

VK_OEM_5
0DCh
Punctuation.

VK_OEM_6
0DDh
Punctuation.

VK_OEM_7
0DEh
Punctuation.

VK_OEM_8
0DFh
Punctuation.

VK_F17
0E0h
F17 key on Olivetti extended keyboard (internal use only).

VK_F18
0E1h
F18 key on Olivetti extended keyboard (internal use only).

VK_OEM_102
0E2h
< or | on IBM-compatible 102 enhanced keyboard (non-U.S.).

VK_ICO_HELP
0E3h
Help key on Olivetti extended keyboard (internal use only).

VK_ICO_00
0E4h
00 key on Olivetti extended keyboard (internal use only).



E5h unassigned.

VK_ICO_CLEAR
0E6h
Olivetti extended keyboard (internal use only).



E7h and E8h unassigned.

VK_OEM_RESET
0E9H
Only used by Nokia.

VK_OEM_JUMP
0EAH
Only used by Nokia.

VK_OEM_PA1
0EBH
Only used by Nokia.

VK_OEM_PA2
0ECH
Only used by Nokia.

VK_OEM_PA3
0EDH
Only used by Nokia.

VK_OEM_WSCTRL
0EEH
Only used by Nokia.

VK_OEM_CUSEL
0EFH
Only used by Nokia.

VK_OEM_ATTN
0F0H
Only used by Nokia.

VK_OEM_FINNISH
0F1H
Only used by Nokia.

VK_OEM_COPY
0F2H
Only used by Nokia.

VK_OEM_AUTO
0F3H
Only used by Nokia.

VK_OEM_ENLW
0F4h
Only used by Nokia.

VK_OEM_BACKTAB
0F5h
Only used by Nokia.

VK_ATTN
0F6H


VK_CRSEL
0F7H


VK_EXSEL
0F8H


VK_EREOF
0F9H


VK_PLAY
0FAH


VK_ZOOM
0FBH


VK_NONAME
0FCH


VK_PA1
0FDH


VK_OEM_CLEAR
0FEH


Ух скока понаписал - надо бы в FAQ засунуть. smile.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Guest
Дата 22.9.2004, 15:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Хм...по моему больше 4 клавишь низя сразу отловить
  Вверх
cardinal
Дата 22.9.2004, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата(Guest @ 22.9.2004, 14:01)
Хм...по моему больше 4 клавишь низя сразу отловить

Больше десяти будет сложно - пальцев не хватит biggrin.gif

А вообще я вот только что специально для тебя 5 клавиш отловил thumbs-up.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Vach
Дата 22.9.2004, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 17.10.2003
Где: Санкт-Петербург

Репутация: 8
Всего: 18



При нажатии 4 клавиш keys заполняется, а вот пятую уже не отловить.
Ограничение чисто физическое (как я его понимаю) контроллер клавиатуры больше не умеет генерить событий.
PM MAIL ICQ   Вверх
cardinal
Дата 22.9.2004, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата(Vach @ 22.9.2004, 15:53)
При нажатии 4 клавиш keys заполняется, а вот пятую уже не отловить.

Ну я что вру что ли? smile.gif

Вот этот код у меня работает:
Код
Option Explicit

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

Const VK_0 = &H30
Const VK_1 = &H31
Const VK_2 = &H32
Const VK_3 = &H33
Const VK_4 = &H34


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) And keys(VK_2) And keys(VK_3) And keys(VK_4)) Then MsgBox "Вот они!"
End Sub



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Guest
Дата 23.9.2004, 08:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Значит больше пяти нельзя.......только что попробывал......6 кнопов уже усе - не яботает biggrin.gif
  Вверх
Akina
Дата 23.9.2004, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Количество кнопов, кое можно отловить, зависит от конкретной клавиатуры. У меня на работе Гениус, 5 клавиш, а дома Черри - 7 клавиш ловит, и старая клава неизвестно чья - только 3. Правда проверял из ДОСа по поллингу портов клавиатуры - не исключаю что у Винды есть свои ограничения на этот счет.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
cardinal
Дата 23.9.2004, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Ну вот ситуация и прояснилась... smile.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Guest
Дата 24.9.2004, 08:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











cardinal
Хех, а нажмите сначала <- затем -> п потом ^ - стрелочку......

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0945 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.