Logré implementar el API "AsciiEx":
Aún estoy probando con "ToUnicode", pero no logro que funcione dentro del "hook proc". Cuando aparece un WM_DEADCHAR en el sistema, al parecer si se manipula el lParam dentro de un subclassing, lo hace saltar y envía WM_CHAR. Hasta ahora, la única solución que encontré es blockear la función del programa con las teclas que generan ese problema, son VKcode: 186 y 222.
Para resumir, si mi hook está activo, escribo en block de notas y si presiono la tecla de tilde (´), directamente se escribe: ´´. Y no espera la siguiente pulsación.
Código [Seleccionar]
Private Function KBProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
'On Error Resume Next
If (nCode = HC_ACTION) Then
If (wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN) Then
Dim KBState(255) As Byte
Dim ChrRet As Integer
Dim sChr As String
Dim ret As Long
Dim BufLen As Integer
BufLen = 5
ret = GetKeyboardState(KBState(0))
If ret > 0 Then
ret = ToAsciiEx(lParam, MapVirtualKeyEx(lParam, 2&, 0&), KBState(0), ChrRet, 0&, 0&)
'sChr = StrConv(sChr, vbFromUnicode)
'sChr = String(BufLen, Chr(0))
'ret = ToUnicode(85, MapVirtualKey(85, 0&), KBState(0), StrPtr(sChr), BufLen, 0&)
'ret = ToUnicodeEx(lParam, MapVirtualKeyEx(lParam, 0&, 0&), KBState(0), StrPtr(sChr), BufLen, 0&, 0&)
'sChr = Trim$(Replace$(sChr, Chr(0), vbNullString))
If ChrRet >= 0 And ChrRet < 256 Then
Call Add_Text(Form1.txtLog, Chr(ChrRet))
Else
Call Add_Text(Form1.txtLog, "[" & CStr(ChrRet) & "]")
End If
'Call Add_Text(Form1.txtLog, sChr)
End If
End If
End If
KBProc = CallNextHookEx(hHook, nCode, wParam, lParam)
End Function
Aún estoy probando con "ToUnicode", pero no logro que funcione dentro del "hook proc". Cuando aparece un WM_DEADCHAR en el sistema, al parecer si se manipula el lParam dentro de un subclassing, lo hace saltar y envía WM_CHAR. Hasta ahora, la única solución que encontré es blockear la función del programa con las teclas que generan ese problema, son VKcode: 186 y 222.
Para resumir, si mi hook está activo, escribo en block de notas y si presiono la tecla de tilde (´), directamente se escribe: ´´. Y no espera la siguiente pulsación.