Visual Basic - Please. Necesito ayuda urgente con el KEYCODE 13

Life is soft - evento anual de software empresarial
 
Vista:

Please. Necesito ayuda urgente con el KEYCODE 13

Publicado por Francisco Javier (13 intervenciones) el 29/03/2001 11:39:59
Hola, estoy teniendo problemas para diferenciar las teclas INTRO del teclado normal, de la tecla INTRO del teclado numérico, ya que ambas dan el código de tecla 13, por lo que el programa no puede saber cuando se ha pulsado una tecla u otra. Si sabes alguna forma de diferenciarlas usando visual basic te lo agradecería un montón.

Un saludo.
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:Please. Necesito ayuda urgente con el KEYCODE 1

Publicado por BENJO (167 intervenciones) el 29/03/2001 13:28:08
ünicamente tenés que utilizar los eventos KeyUp o KeyDown, diferenciándose el Keyascii entre la tecla enter del numpad y la del teclado extendido.
Te comento que es mucho más conveiente el KeyUp, ya que se ejecutaría el evento, cuando ya salís del control y no antes, por una vento desencadenado (ej. Msgbox). Uno nunca sabe que te puede deparar un programa.
Suerte
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:Please. Necesito ayuda urgente con el KEYCODE 1

Publicado por Francisco Javier (13 intervenciones) el 30/03/2001 00:58:01
Benjo, gracias por tu consejo, pero al probarlo me da el mismo problema, las dos teclas tienen el mismo codigo ascii el 13, por lo que no puedo difrerenciarlas, si se te ocurre algo avisame, gracias.
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:Please. Necesito ayuda urgente con el KEYCODE 1

Publicado por lelele (3 intervenciones) el 03/04/2001 07:10:43
Lamentablemente te tengo que decir que es imposible... internamente se manejan con el mismo codigo... imposible!!!!...
ademas no le veo fundamento hacer eso
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: Keycode 13, SEÑORES, TIENE QUE SER POSIBLE

Publicado por Francisco Javier (13 intervenciones) el 03/04/2001 19:40:51
Vamos a ver, a todos los que me habeis comentado que no es posible diferenciar las teclas INTRO del teclado numerio y la del teclado normal, porque que estan unidas fisicamente, ya me contaréis como hay programas que SI las diferencias como el famoso juego HALF-LIFE, porque la verdad, yo no lo entiendo.
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: Keycode 13, SI ES POSIBLE, AQUI DIGO COMO

Publicado por Mike79 (97 intervenciones) el 04/06/2001 21:19:27
Soy demasiado curioso, y cuando lei este mensaje, dije, claro que si es posible diferenciar los 2 enters, asi que agarre mi manualito de Apis, y espero que este ejemplo les funcione bien a todos.
Yo lo he probado en 2 computadoras y funciona perfectamente, si no funciona me dicen:

La ide es la siguiente, con el SetWindowsHookEx, interceptamos todas las teclas que se mandan a nuestra form, y con el wPaam nos damos cuenta que letra es, si la Letra es 13 (Enter), entonces pasamos a checar el lParam, busque que es exactamente lo que devuelve la variable en este caso y no lo encontre, yo supongo que en este caso devuelve el "codigo" de la tecla o algo asi, lo cierto es que tiene un codigo cuando "precionamos" la tecla, y otro cuando "liberamos" la tecla, yo en el ejemplo uso cuando liberamos la tecla.

Espero les sirva, yo he encontrado esta codigo muy util, ya que incluso se pueden diferenciar todas las teclas que precionas, incluyendo los Shift, Alt, Control, izquierdo, derecho, etc.. y TARAN tambien podemos diferenciar la tecla de Windows, en Resumen, podemos saber exactamente que tecla es y espero les sirva.


'En un modulo
Public Const WH_KEYBOARD = 2
Public Const VK_SHIFT = &H10
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function
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

GRACIAS MIKE :)

Publicado por Francisco Javier (13 intervenciones) el 04/06/2001 23:36:22
GRACIAS POR TU ESFUERZO MIKE, GENTE COMO TU HACE QUE VALGA LA PENA SEGUIR PROGRAMANDO.

UN SALUDO DESDE ALMERIA.
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: Keycode 13, Codigo Completo

Publicado por Mike79 (97 intervenciones) el 07/06/2001 00:03:29
Por un error no se publico todo el codigo fuente, aqui va todo desde el principio:

'En el Form1
Private Sub Form_Load()
'set a keyboard hook
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, App.ThreadID)
End Sub
Private Sub Form_Unload(Cancel As Integer)
'remove the windows-hook
UnhookWindowsHookEx hHook
End Sub

'En un modulo
Public Const WH_KEYBOARD = 2
Public Const VK_SHIFT = &H10
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Dim Anterior As Long
Public hHook As Long
Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If idHook < 0 Then
KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
Else
If Anterior <> lParam Then
If wParam = 13 Then
If lParam = -1055129599 Then
Form1.Print "Precionates el Enter del teclado numerico"
Else
If lParam = -1071906815 Then
Form1.Print "Precionates el Enter normal"
End If
End If
End If
End If
Anterior = lParam
KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
End If
End Function

Aqui lo que se hace es cachar el teclado y buscamos el codigo extendido de la tecla para comprobar que tecla es, con esto tambien podemos saber si se preciona la tecla de Windows, las de funciones, etc.. cualquier tecla.
Saludos
-
Mike79
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