Клавиатура

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

Клавиатура

Сообщение killerb » 06.05.2005 (Пт) 20:16

Я очень долго искал исходники программы, которая отлавливает Нажатия клавиш вне формы, но нашел и решил поделиться.
Код: Выделить всё
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Timer1_Timer()
    For i = 1 To 120
        If GetAsyncKeyState(i) Then n = i
    Next i
    Me.Caption = n & "-" & Chr(n)
End Sub

Таблица символов:
TAB - 9
Caps Look - 20
Shift - 16
Ctrl - 17
Alt - 18
Win 91
Space - 32
Enter - 13
Left - 37
Up - 38
Right - 39
Down - 40
Black Space - 8
...
Mouse Левая - 1
Mouse Правая - 2
Mouse Средняя - 4
Последний раз редактировалось killerb 06.05.2005 (Пт) 20:25, всего редактировалось 1 раз.
Жизнь - это карусель, на которой никому не дано удержаться надолго. Стивен Кинг

killerb
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 27.01.2005 (Чт) 23:08
Откуда: Днепропетровск

Сообщение killerb » 06.05.2005 (Пт) 20:35

Плиз, подскажите функцию и к ней параметры, с помощью которой можно "нажимать" клавиши клавиатуры. Если лень дать полноценный ответ - сойдет и ссылка ...
Жизнь - это карусель, на которой никому не дано удержаться надолго. Стивен Кинг

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.05.2005 (Пт) 20:36

keybd_event...
В Яндекс за описанием. Или в msdn.microsoft.com/library. Или в API-Guide.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.05.2005 (Пт) 20:40

API-Guide писал(а):The keybd_event function synthesizes a keystroke. The system can use such a synthesized keystroke to generate a WM_KEYUP or WM_KEYDOWN message. The keyboard driver’s interrupt handler calls the keybd_event function.


Код: Выделить всё
Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)


API-Guide писал(а):· bVk
Specifies a virtual-key code. The code must be a value in the range 1 to 254.

· bScan
Specifies a hardware scan code for the key.

fdwFlags
A set of flag bits that specify various aspects of function operation. An application can use any combination of the following predefined constant values to set the flags:
KEYEVENTF_EXTENDEDKEY
If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).
KEYEVENTF_KEYUP
If specified, the key is being released. If not specified, the key is being depressed.

· dwExtraInfo
Specifies an additional 32-bit value associated with the key stroke.


Example:
Код: Выделить всё
Const VK_H = 72
Const VK_E = 69
Const VK_L = 76
Const VK_O = 79
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Sub Form_KeyPress(KeyAscii As Integer)
    'Print the key on the form
    Me.Print Chr$(KeyAscii);
End Sub
Private Sub Form_Paint()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'Clear the form
    Me.Cls
    keybd_event VK_H, 0, 0, 0   ' press H
    keybd_event VK_H, 0, KEYEVENTF_KEYUP, 0   ' release H
    keybd_event VK_E, 0, 0, 0  ' press E
    keybd_event VK_E, 0, KEYEVENTF_KEYUP, 0  ' release E
    keybd_event VK_L, 0, 0, 0  ' press L
    keybd_event VK_L, 0, KEYEVENTF_KEYUP, 0  ' release L
    keybd_event VK_L, 0, 0, 0  ' press L
    keybd_event VK_L, 0, KEYEVENTF_KEYUP, 0  ' release L
    keybd_event VK_O, 0, 0, 0  ' press O
    keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0  ' release O
End Sub

killerb
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 27.01.2005 (Чт) 23:08
Откуда: Днепропетровск

Сообщение killerb » 06.05.2005 (Пт) 20:45

Спасибо.

Я нашел аналог, причем более простой...
Код: Выделить всё
SendKeys {ENTER}
'где вместо ENTER - название любой другой клавиши (1...0;а-я;a-z;PGUP,PGDOWN...)
Жизнь - это карусель, на которой никому не дано удержаться надолго. Стивен Кинг

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Клавиатура

Сообщение tyomitch » 06.05.2005 (Пт) 22:05

killerb писал(а):Таблица символов:
TAB - 9
Caps Look - 20
Shift - 16
Ctrl - 17
Alt - 18
Win 91
Space - 32
Enter - 13
Left - 37
Up - 38
Right - 39
Down - 40
Black Space - 8
...
Mouse Левая - 1
Mouse Правая - 2
Mouse Средняя - 4

И не лень было жать на все кнопки подряд, когда эта таблица уже есть на http://msdn.microsoft.com/library/en-us ... ycodes.asp :?: ;-)
Изображение

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 06.05.2005 (Пт) 23:44

А можно получать состояние сразу всех клавиш.

Код: Выделить всё
Private Type KeyboardBytes
     kbByte(0 To 255) As Byte
End Type
Private Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim kbArray As KeyboardBytes

Private Sub Form_Activate()
Do

Me.Cls
GetKeyboardState kbArray
For n = 1 To 255
Print kbArray.kbByte(n)
Next
Sleep 10
DoEvents
Loop
End Sub


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 75

    TopList