Captura de Teclas en VB 2005

15/06/2006 - 01:47 por GsM | Informe spam
Hola a todos en el foro, estoy diseñando una aplicación en vb.net
2005 y necesito capturar la pulsación de algunas teclas, así como una
combinación de las mismas.

Encontré la forma de sobre escribir el método WndProc para acceder a
la cola de mensajes que van hacia la ventana, pero tal parece que no lo
estoy haciendo de la forma correcta. El código que estoy utilizando es
el siguiente:

Private WM_KEYDOWN As Integer = &H100
Private WM_KEYUP As Integer = &H101
Private Const VK_ESC As Integer = &H1B

Protected Overrides Sub WndProc(ByRef m As
System.Windows.Forms.Message)
Dim keycode As Keys = CType(m.WParam.ToInt32(), Keys) And
Keys.KeyCode

Select Case m.Msg
Case WM_KEYDOWN
Debug.Print ("Tecla Presionada")
If keycode = VK_ESC Then
Debug.Print ("Teclas Escape Pulsada")
End If
Case WM_KEYUP
Debug.Print ("Tecla Liberada")
End Select

MyBase.WndProc(m)
End Sub

Sin embargo esto no funciona, ya que el valor de la variable m.Msg así
como el de variable m.WParam siempre son diferentes de los valores
esperados para un evento de pulsación de tecla. Esto es, jamás
concuerdan con las constantes WM_KEYDOWN, WM_KEYUP ó VK_ESC.

Si alguien tiene alguna idea sobre lo que pueda estar causando este
inconveniente ó conoce alguna forma alterna para hacer la captura de
las teclas le agradeceré me lo haga saber.

De antemano gracias.

Saludos,
Gonzalo.
 

Leer las respuestas

#1 Gustavo Arriola
15/06/2006 - 04:21 | Informe spam
Intenta con esto, lo utilizo en VB 2003, quizás te sirva
Saludos cordiales!!
Gustavo Arriola

Protected Overrides Function ProcessCmdKey(ByRef msg As
System.Windows.Forms.Message, ByVal KeyData As System.Windows.Forms.Keys) As
Boolean
Try
If msg.WParam.ToInt32 = CInt(Keys.Home) Then
'Tecla Homepresionada

ElseIf msg.WParam.ToInt32 = CInt(Keys.PageDown) Then
'Tecla PageDown presionada

ElseIf msg.WParam.ToInt32 = CInt(Keys.PageUp) Then
'Tecla PageUp presionada

ElseIf msg.WParam.ToInt32 = CInt(Keys.End) Then
'Tecla End presionada
End If

Return MyBase.ProcessCmdKey(msg, KeyData)

Catch ex As Exception
MessageBox.Show("Error")
End Try

End Function

Preguntas similares