Visual Basic - [VB6] Capturar tecla en todo momento, como?

Life is soft - evento anual de software empresarial
   
Vista:

[VB6] Capturar tecla en todo momento, como?

Publicado por Jorge Ruiz (8 intervenciones) el 22/04/2009 09:23:42
Saludos!!! Primera vez que les posteo en su sitio, espero tener una buena respuesta

Resulta que necesito saber de què manera puedo hacer un ejecutable que una vez cargado, detecte la tecla numero 5 por ejemplo pero en todo momento, ya sea cargando algún juego, o reproduciendo musica o cualquier otra tarea, este ejecutable siga en memoria detectando cuando se presiona la tecla numero 5.

Debo decir además que form_deactivate o form_lostfocus no me funciona, no sé por qué, pero buscando el google a muchos les pasa lo mismo, pensaba usar aquellos para jugar un poco y asi tratar de hacer lo que necesito

Creo que se entiende bien, espero sus respuestas amigos :) gracias!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:[VB6] Capturar tecla en todo momento, como?

Publicado por P3L30N2009 (701 intervenciones) el 22/04/2009 09:52:06
Busca información sobre la función "GetAsyncKeyState" de la API
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:[VB6] Capturar tecla en todo momento, como?

Publicado por Jorge Ruiz (8 intervenciones) el 22/04/2009 10:20:45
Saludos!

He dado con una solución (que hace referencia a GetAsyncKeyState que usted me dijo) y quiero compartirla con ustedes, pero aún asi tengo otra duda:

la solucion fué poner un timer con interval=1 chequeando las pulsaciones del teclado, supongamos que quiero detectar solamente cuando presiono el numero 5

PEGAR ESTO EN UN MODULO
Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer
Global v(44)
Global tx1
Public Const VK_0 = &H30
Public Const VK_1 = &H31
Public Const VK_2 = &H32
Public Const VK_3 = &H33
Public Const VK_4 = &H34
Public Const VK_5 = &H35
Public Const VK_6 = &H36
Public Const VK_7 = &H37
Public Const VK_8 = &H38
Public Const VK_9 = &H39
Public Const VK_A = &H41
Public Const VK_B = &H42
Public Const VK_C = &H43
Public Const VK_D = &H44
Public Const VK_E = &H45
Public Const VK_F = &H46
Public Const VK_G = &H47
Public Const VK_H = &H48
Public Const VK_I = &H49
Public Const VK_J = &H4A
Public Const VK_K = &H4B
Public Const VK_L = &H4C
Public Const VK_M = &H4D
Public Const VK_N = &H4E
Public Const VK_O = &H4F
Public Const VK_P = &H50
Public Const VK_Q = &H51
Public Const VK_R = &H52
Public Const VK_S = &H53
Public Const VK_T = &H54
Public Const VK_U = &H55
Public Const VK_V = &H56
Public Const VK_W = &H57
Public Const VK_X = &H58
Public Const VK_Y = &H59
Public Const VK_Z = &H5A
Public Const VK_SPACE = &H20
Public Const VK_EXECUTE = &H2B

EN EL FORMULARIO (EN EL TIMER CON INTERVAL=1)
Private Sub Timer1_Timer()
v(1) = GetAsyncKeyState(VK_0)
v(2) = GetAsyncKeyState(VK_1)
v(3) = GetAsyncKeyState(VK_2)
v(4) = GetAsyncKeyState(VK_3)
v(5) = GetAsyncKeyState(VK_4)
v(6) = GetAsyncKeyState(VK_5)
v(7) = GetAsyncKeyState(VK_6)
v(8) = GetAsyncKeyState(VK_7)
v(9) = GetAsyncKeyState(VK_8)
v(10) = GetAsyncKeyState(VK_9)
v(11) = GetAsyncKeyState(VK_A)
v(12) = GetAsyncKeyState(VK_B)
v(13) = GetAsyncKeyState(VK_C)
v(14) = GetAsyncKeyState(VK_D)
v(15) = GetAsyncKeyState(VK_E)
v(16) = GetAsyncKeyState(VK_F)
v(17) = GetAsyncKeyState(VK_G)
v(18) = GetAsyncKeyState(VK_H)
v(19) = GetAsyncKeyState(VK_I)
v(20) = GetAsyncKeyState(VK_J)
v(21) = GetAsyncKeyState(VK_K)
v(22) = GetAsyncKeyState(VK_L)
v(23) = GetAsyncKeyState(VK_M)
v(24) = GetAsyncKeyState(VK_N)
v(25) = GetAsyncKeyState(VK_O)
v(26) = GetAsyncKeyState(VK_P)
v(27) = GetAsyncKeyState(VK_Q)
v(28) = GetAsyncKeyState(VK_R)
v(29) = GetAsyncKeyState(VK_S)
v(30) = GetAsyncKeyState(VK_T)
v(31) = GetAsyncKeyState(VK_U)
v(32) = GetAsyncKeyState(VK_V)
v(33) = GetAsyncKeyState(VK_W)
v(34) = GetAsyncKeyState(VK_X)
v(35) = GetAsyncKeyState(VK_Y)
v(36) = GetAsyncKeyState(VK_Z)
v(36) = GetAsyncKeyState(VK_Z)
v(37) = GetAsyncKeyState(VK_SPACE)
v(38) = GetAsyncKeyState(VK_RETURN)

If (v(6) And &H1) = &H1 Then
tx1 = tx1 + "5"

msgbox "HA PRESIONADO EL NUMERO 5"

End If

End Sub

Es bastante simple y me funciona. Gracias. Pero tengo otra duda relacionado con lo mismo, pero lo postearé como otra consulta para mayor ordenamiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:[VB6] Capturar tecla en todo momento, como?

Publicado por P3L30N2009 (701 intervenciones) el 22/04/2009 11:49:14
No está mal si así funciona, pero puedes reducir bastante el código:

En un módulo .bas
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Esto si vas a utilizar la función desde cualquier formulario del proyecto. Si sólo es desde un único Form, la puedes declarar en el mismo Form como Private.

En el formulario:
Private Sub Timer1_Timer()
If GetAsyncKeyState(53) <> 0 Or GetAsyncKeyState(101) <> 0 Then
Text1 = Text1 + "5"
MsgBox "HA PRESIONADO EL NUMERO 5"
End If
End Sub

Nota: 53 es el Decimal de la tecla "5" y 101 el del teclado numérico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:[VB6] Capturar tecla en todo momento, como?

Publicado por jorge ruiz (8 intervenciones) el 22/04/2009 20:29:36
Oh que genial, gracias por la ayuda, se reduce mucho el codigo. Thanks
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar