Traducir caracteres WH_KEYBOARD
Publicado por _Carlos (5 intervenciones) el 28/12/2006 22:57:08
Hola compañeros haber si alguien me puede ayudar
El problema que tengo es que instale un hook para el teclado ese funciona perfectamente, pero tiene una limitante que no se como evitarla.
Cuando mi procedimiento callback es llamadado yo identifico cierto comando de entrada y una vez identificado el teclado se bloquea temporalmente en lo que reciben datos del buffer.
el problema es que hay ciertos caracteres que llegan desde este como son; ";" "%" "#" y estos caracteres no se traducen.
He probado:
Cambiado el estado de las banderas del teclado pero no hace efecto y considero que esta no es la manera correcta ya que el teclado debe de tener estas banderas.
KeyBoardState (VirtualKey.VK_LSHIFT)=1
KeyBoardState (VirtualKey.VK_RSHIFT)=1
KeyBoardState (VirtualKey.VK_SHIFT)=1
Public Function GetCharFromKey(ByVal keyCode As Integer) As String
Dim KeyBoardState(255) As Byte
Dim Out As Long
Dim KeyResult As Integer
Dim GetShift As Boolean
If GetKeyboardState(KeyBoardState(0)) <> 0 Then
KeyBoardState(VirtualKey.VK_CAPSLOCK) = 1
If ToAscii(keyCode, 0, KeyBoardState(0), Out, 0) <> 0 Then
If Out <= 255 Then
GetCharFromKey = Chr$(Out)
Else
GetCharFromKey = Left$(StrConv(ChrW$(Out), vbUnicode), 1)
End If
End If
End If
End Function
El problema que tengo es que instale un hook para el teclado ese funciona perfectamente, pero tiene una limitante que no se como evitarla.
Cuando mi procedimiento callback es llamadado yo identifico cierto comando de entrada y una vez identificado el teclado se bloquea temporalmente en lo que reciben datos del buffer.
el problema es que hay ciertos caracteres que llegan desde este como son; ";" "%" "#" y estos caracteres no se traducen.
He probado:
Cambiado el estado de las banderas del teclado pero no hace efecto y considero que esta no es la manera correcta ya que el teclado debe de tener estas banderas.
KeyBoardState (VirtualKey.VK_LSHIFT)=1
KeyBoardState (VirtualKey.VK_RSHIFT)=1
KeyBoardState (VirtualKey.VK_SHIFT)=1
Public Function GetCharFromKey(ByVal keyCode As Integer) As String
Dim KeyBoardState(255) As Byte
Dim Out As Long
Dim KeyResult As Integer
Dim GetShift As Boolean
If GetKeyboardState(KeyBoardState(0)) <> 0 Then
KeyBoardState(VirtualKey.VK_CAPSLOCK) = 1
If ToAscii(keyCode, 0, KeyBoardState(0), Out, 0) <> 0 Then
If Out <= 255 Then
GetCharFromKey = Chr$(Out)
Else
GetCharFromKey = Left$(StrConv(ChrW$(Out), vbUnicode), 1)
End If
End If
End If
End Function
Valora esta pregunta


0