Hola a todos!
Hace tiempo hice una funcion en VB para que segun las teclas que estes pulsando (flechas) te retornaba un valor del 1 al 9.
Por ejemplo, si pulso ARRIBA+ DERECHA te devolvia 9
Lo quiero para hacer jueguecillos 2D
pero en VB usaba el API de windows y aqui no se como hacerlo o sea detectar teclas pero no en un evento keypress de un control sino algo en general, como si fuese a hacer un keylogger.
Os dejo el codigo en VB para que veais a lo que me refiero.
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Public Const KEY_TOGGLED = &H1
Public Const KEY_DOWN = &H1000
'Variables
Public K_LEFT As Long 'Variables para guardar el estado de ciertas teclas
Public K_RIGHT As Long
Public K_UP As Long
Public K_DOWN As Long
Public K_SPACE As Long
'//Escanea las teclas de direccion y la de espacio para ver si estan pulsadas
Public Sub GDKInitKeyBoard()
K_LEFT = GetKeyState(vbKeyLeft)
K_RIGHT = GetKeyState(vbKeyRight)
K_UP = GetKeyState(vbKeyUp)
K_DOWN = GetKeyState(vbKeyDown)
K_SPACE = GetKeyState(vbKeySpace)
End Sub
'//Funcion que detecta si una tecla esta siendo pulsada (true) o no (false)
Public Function GDKIsKeyPressed(Key As Long)
If Key And KEY_DOWN Then
GDKIsKeyPressed = True
Else
GDKIsKeyPressed = False
End If
End Function
'//Funcion que detecta si 2 teclas estan siendo pulsadas (true) o no (false)
Public Function GDKKeysArePressed(key1 As Long, key2 As Long)
If (key1 And KEY_DOWN) And (key2 And KEY_DOWN) Then
GDKKeysArePressed = True
Else
GDKKeysArePressed = False
End If
End Function
'Devuelve el valor de la direccion segun el teclado numerico (4 Izquierda, 6 Derecha, 2 Abajo, 9 Arriba+Derecha...)
Public Function GDKGetDirectionFromKeys() As Integer
'Si hay 2 teclas pulsadas
If GDKKeysArePressed(K_UP, K_RIGHT) Then
GDKGetDirectionFromKeys = 9
Else
If GDKKeysArePressed(K_UP, K_LEFT) Then
GDKGetDirectionFromKeys = 7
Else
If GDKKeysArePressed(K_DOWN, K_LEFT) Then
GDKGetDirectionFromKeys = 1
Else
If GDKKeysArePressed(K_DOWN, K_RIGHT) Then
GDKGetDirectionFromKeys = 3
Else
'Si hay una sola tecla pulsada
If GDKIsKeyPressed(K_UP) Then
GDKGetDirectionFromKeys = 8
Else
If GDKIsKeyPressed(K_DOWN) Then
GDKGetDirectionFromKeys = 2
Else
If GDKIsKeyPressed(K_LEFT) Then
GDKGetDirectionFromKeys = 4
Else
If GDKIsKeyPressed(K_RIGHT) Then
GDKGetDirectionFromKeys = 6
Else
GDKGetDirectionFromKeys = 0
End If
End If
End If
End If
End If
End If
End If
End If
End Function
Public Const KEY_TOGGLED = &H1
Public Const KEY_DOWN = &H1000
'Variables
Public K_LEFT As Long 'Variables para guardar el estado de ciertas teclas
Public K_RIGHT As Long
Public K_UP As Long
Public K_DOWN As Long
Public K_SPACE As Long
'//Escanea las teclas de direccion y la de espacio para ver si estan pulsadas
Public Sub GDKInitKeyBoard()
K_LEFT = GetKeyState(vbKeyLeft)
K_RIGHT = GetKeyState(vbKeyRight)
K_UP = GetKeyState(vbKeyUp)
K_DOWN = GetKeyState(vbKeyDown)
K_SPACE = GetKeyState(vbKeySpace)
End Sub
'//Funcion que detecta si una tecla esta siendo pulsada (true) o no (false)
Public Function GDKIsKeyPressed(Key As Long)
If Key And KEY_DOWN Then
GDKIsKeyPressed = True
Else
GDKIsKeyPressed = False
End If
End Function
'//Funcion que detecta si 2 teclas estan siendo pulsadas (true) o no (false)
Public Function GDKKeysArePressed(key1 As Long, key2 As Long)
If (key1 And KEY_DOWN) And (key2 And KEY_DOWN) Then
GDKKeysArePressed = True
Else
GDKKeysArePressed = False
End If
End Function
'Devuelve el valor de la direccion segun el teclado numerico (4 Izquierda, 6 Derecha, 2 Abajo, 9 Arriba+Derecha...)
Public Function GDKGetDirectionFromKeys() As Integer
'Si hay 2 teclas pulsadas
If GDKKeysArePressed(K_UP, K_RIGHT) Then
GDKGetDirectionFromKeys = 9
Else
If GDKKeysArePressed(K_UP, K_LEFT) Then
GDKGetDirectionFromKeys = 7
Else
If GDKKeysArePressed(K_DOWN, K_LEFT) Then
GDKGetDirectionFromKeys = 1
Else
If GDKKeysArePressed(K_DOWN, K_RIGHT) Then
GDKGetDirectionFromKeys = 3
Else
'Si hay una sola tecla pulsada
If GDKIsKeyPressed(K_UP) Then
GDKGetDirectionFromKeys = 8
Else
If GDKIsKeyPressed(K_DOWN) Then
GDKGetDirectionFromKeys = 2
Else
If GDKIsKeyPressed(K_LEFT) Then
GDKGetDirectionFromKeys = 4
Else
If GDKIsKeyPressed(K_RIGHT) Then
GDKGetDirectionFromKeys = 6
Else
GDKGetDirectionFromKeys = 0
End If
End If
End If
End If
End If
End If
End If
End If
End Function
Agradeceria mucho vuestra ayuda
Gracias