Отследить нажатие на клавиши

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Отследить нажатие на клавиши

Сообщение Mirus » 17.05.2003 (Сб) 0:10

Как узнать(при не активной форме) что ктото нажал клавишу на клавиатуре?
Нашел пример с GetAsyncKeyState но он не подходит т.к. в нем можно проверять только конкретную клавишу
GetAsyncKeyState(VK_RETURN) < 0 Then ...
Придется тогда прописывать все клавиши, код получается слишком большой.
Нужно чтоб программа реагировала на любое нажатие на клавиатуре.
Mirus

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 17.05.2003 (Сб) 7:24

ну почему это GetAsyncKeyState не подходит? ты скажи в чём суть перехватывания... :twisted:
в нем можно проверять только конкретную клавишу

а ты как хотел? :roll:
можно еще гонять directinput, но эт дополнительные библиотеки, но тебе нужен маленький код... :evil:
считаю GetAsyncKeyState является самым подходящим (хе... да я еще даже не могу вспомнить каких-либо других способов определения нажатий клавиш :lol: )... всяко в любом случае тебе придется описывать все кнопки...

а это так, мож чё приголится :roll:
http://www.vbnet.ru/faq/showtopic.asp?id=172
http://www.vbnet.ru/faq/showtopic.asp?id=364
http://www.vbnet.ru/faq/showtopic.asp?id=168
http://www.vbnet.ru/faq/showtopic.asp?id=166
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 17.05.2003 (Сб) 11:08

а ты как хотел?

Да так и хотел чтоб не описывать все кнопки.
Делаю что-то вроде скринсейвера. Чтоб при набатии клавиши он отключился!
А ссылки что-то не работают
Mirus

sash
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.05.2003 (Сб) 3:37

Сообщение sash » 17.05.2003 (Сб) 11:30

Попробуй так:
Код: Выделить всё
For i = 0 To 255
        If GetAsyncKeyState(CLng("&h" & Hex(i))) < 0 Then
         .......   
        End If
Next

диапазон цикла можно изменить как тебе надо.

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 17.05.2003 (Сб) 13:35

sash
Это как раз описывание всех кнопок.
Я думал может API какая нибуть есть что-то вроде Inkey$ как в QBasic'е.
Mirus

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 17.05.2003 (Сб) 19:47

Mirus писал(а):sash
Это как раз описывание всех кнопок.

хех... а чем этот код не подходит... он не большой...
:roll: можно еще и таймером воспользоваться... :twisted:
Код: Выделить всё
Private Sub Timer1_Timer()
KeyResult = GetAsyncKeyState(96) 'код кнопки...
If KeyResult = -32767 Then
...
End If

или если так подумать, то при включении скринсейвера, фокус переходит на него и отлавливать все нажатия можно попробовать на форме... :wink:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 17.05.2003 (Сб) 20:49

фокус переходит на него и отлавливать все нажатия можно попробовать на форме

В моем случае форма не активна!
Mirus

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

Сообщение Amed » 18.05.2003 (Вс) 16:13

ИМХО, иначе никак - пиши цикл с GetAsyncKeyState

GriKo
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.10.2002 (Пт) 22:30
Откуда: Israel

Сообщение GriKo » 21.05.2003 (Ср) 12:03

Я вот этим пользовался в своё время:
Код: Выделить всё
Option Explicit
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Const KEY_TOGGLED As Integer = &H1
Private Const KEY_DOWN As Integer = &H1000
Dim TimeToEnd As Boolean

Private Sub Form_Load()
RunMain
End Sub
Private Sub RunMain()
Me.Show
Me.Refresh
Do
    If (GetKeyState(vbKeyA) And KEY_DOWN) Then
        lblKeyA.Caption = "A is Pressed"
    Else
        lblKeyA.Caption = ""
    End If
    If (GetKeyState(vbKeyLeft) And KEY_DOWN) Then
        lblKeyLeft.Caption = "Left Arrow Key is Pressed"
    Else
        lblKeyLeft.Caption = ""
    End If
    If (GetKeyState(vbKeyCapital) And KEY_DOWN) Then
        lblCapsLock.Caption = "Caps Lock is pressed"
    ElseIf (GetKeyState(vbKeyCapital) And KEY_TOGGLED) Then
        lblCapsLock.Caption = "Caps Lock is toggled"
    Else
        lblCapsLock.Caption = ""
    End If
    DoEvents
Loop Until TimeToEnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
TimeToEnd = True
End Sub
BIL - GEY... TSSS...


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

    TopList