La Web del Programador: Comunidad de Programadores
 
    Pregunta:  6082 - TECLA INTRO DEL TECLADO NUMERICO
Autor:  Francisco Javier Ruiz Pernia
Estoy tratando de saber si se puede hacer que el visual basic distinga entre la tecla INTRO del teclado numérico y la tecla INTRO del teclado normal. Ambas me dan el código de tecla 13 cuando hago una llamada al evento Keypress y KeyDown, ¿Alguien sabe como se puede hacer?

  Respuesta:  Jose A. Hernández
Hola Francisco.
Aquí va la respuesta a tu pregunta.
Cuando usas la constante vbKeySeparator para evaluar las pulsaciones de teclas en los eventos KeyUp, KeyDown o KeyPress y distinguir el Enter del teclado alfabético y el Intro del numérico las comparaciones siempre devuelven falso debido a un bug (del VB 4, 5 y 6 !!).

Para resolverlo :

Declaramos en el formulario :
Private Declare Function PeekMessage Lib "user32" Alias _
"PeekMessageA" (lpMsg As MSG, ByVal hwnd As Long, _
ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, _
ByVal wRemoveMsg As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Private Type MSG
hwnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type

Const PM_NOREMOVE = &H0
Const WM_KEYDOWN = &H100
Const WM_KEYUP = &H101
Const VK_RETURN = &HD

Y en el evento :

Dim MyMsg As MSG, RetVal As Long

' se le pasa:
' estructura MSG para recibir la información del mensaje
' handle de la ventana
' filtros superior e inferior a 0 para recibir todos los mensajes
' PM_NOREMOVE para dejar las pulsaciones en la cola de mensajes
' usa PM_REMOVE (1) para eliminarlas
RetVal = PeekMessage(MyMsg, Me.hwnd, 0, 0, PM_NOREMOVE)

' ahora comparamos el MSG.wParam con VK_RETURN
' si la pulsación fue esta, miramos el bit 24 del lparam. Si está ON se usó el
' teclado numérico, si no el alfabético.
If RetVal <> 0 Then
If MyMsg.wParam = VK_RETURN Then
If MyMsg.lParam And &H1000000 Then
MsgBox "Enter del teclado numérico"
Else
MsgBox "Enter del teclado alfabético"
End If
End If
Else
MsgBox "No había mensajes en la cola o a habido problemas con PeekMessage"
End If

Espero que te sirva. No suelo tener mucho tiempo para esto de la informática, pero si tienes algún problema, dímelo y veremos si se puede hacer algo. Un saludo

  Respuesta:  Hugo Montes
Aunque so'lo programo en Qbasic y para uso personal, intente' hacer lo mismo a trave's del MS2 utilizando el Ansi.sys cargado en el Config.sys..... no me resulto' pero tbn. reconozco que no segui' ninguna bu'squeda detallada utilizando los mandos Switches, Keyb, modificadores /x /k, combinaciones, etc..... asi' que so'lo quiero mencionarte dos detalles:
1ro.- Pienso en que el Vbasic no esta' demasiado lejos de co'digos y t'ecnicas ba'sicas del MS2 y los anteriores Basic's para MS2 que muchos DESPRECIAN olvida'ndose que en todo el mundo la mayori'a comenzo' con esos compiladores [aunque el Vbasic tiene alcances mayores, es verdad].....
2do.- A trave's del MS2 y usando el Ansi.sys la u'nica diferencia que encontre' entre las dos teclas Intro fue que usa'ndolas en combinacio'n con las teclas Alt [las alternas] SI' producen dos co'digos nume'ricos distintos..... Porque' no utilizarlas que al fin y al cabo he visto que todo programador siempre coloca las combinaciones de teclas ma's REBUSCADAS que puede encontrar?..... Crees que notari'an la diferencia?..... Hugo Montes.,

  Respuesta:  Alf Carmona
no se puede diferenciar, puesto que es la misma tecla, solamante es cuestion de distribucion del teclado.