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.

Preguntas similare

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
Respuesta Responder a este mensaje
#2 DosFlores
15/06/2006 - 13:28 | Informe spam
A él no lo sé pero a mí me ha ido de maravilla, así que muchas gracias.

Un saludo
Oscar Montesinos
"Gustavo Arriola" escribió en el mensaje
news:
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


Respuesta Responder a este mensaje
#3 GsM
15/06/2006 - 17:07 | Informe spam
Muchas gracias Gustavo ha funcionado muy bien...

Saludos,
Gonzalo.
Respuesta Responder a este mensaje
#4 David Sans
16/06/2006 - 10:57 | Informe spam
Hola

Para una tecla me funciona, pero para capturar ALT + D o CTRL + D . Como se puede controlar?

Un saludo
David Sans

"Gustavo Arriola" escribió en el mensaje news:
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


Respuesta Responder a este mensaje
#5 David Sans
16/06/2006 - 12:13 | Informe spam
Ya he dado con ello. Pero no se si es lo mas correcto.
Lo hago así:
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 KeyData = Keys.Alt + Keys.D Then
Debug.WriteLine(Now.Millisecond & "Tecla ALT + D presionada")
End If
Return MyBase.ProcessCmdKey(msg, KeyData)
Catch ex As Exception
MessageBox.Show("Error")
End Try
End Function


Otra cosa que diferencia hay entre las siguientes preguntas, cual es mejor?

If msg.WParam.ToInt32 = CInt(Keys.Home) Then ..
y
If KeyData = Keys.Home Then ..


Un saludo
David Sans
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida