Alex Mals писал(а):lParam скопируй с помощью CopyMemory в че-нить типа pKbDllHs (as KBDLLHOOKSTRUCT).
Если получится - ура, нет, завтра разберемся.
По lParam обработчика лежит структура tagMSG, по tagMSG.lParam если что-то и лежит, то не то.
Опишу проблему подробнее, т.к. понял, что не с той стороны спрашиваю:
1.Есть XpressQuantumGrid, который не хочет отдавать свои клавиатурные события форме по Form.KeyPreview=true
2.Есть NumLock, который либо включен, либо нет
Задача: единая функция обработки событий клавы и работа с доп.клавиатурой, не заботясь о состоянии NumLock (к примеру Numlock=false, жмешь доп.9 , получаешь vbKeyNumpad9, а не vbKeyPageUp)
Я вешаю два хука: WH_GETMESSAGE и WH_KEYBOARD_LL
Первый редиректит все сообщения окну (фрагмент по теме)
- Код: Выделить всё
Dim msg As TMSG
CopyMemory msg, ByVal lParam, Len(msg)
msg.hwnd = GetForegroundWindow
CopyMemory ByVal lParam, msg, Len(msg)
sysMessageProc = CallNextHookEx(fmMainMsgHook, nCode, wParam, lParam)
Второй прозрачно включает NumLock (фрагмент по теме)
- Код: Выделить всё
Dim kb As KBDLLHOOKSTRUCT
CopyMemory kb, ByVal lParam, Len(kb)
If Not GetBit(kb.flags, 1) Then
l = GetNumpadVkCode(kb.scanCode)
If l > 0 And l <> kb.vkCode Then
SetNumLockState True
keybd_event l, &H45, KEYEVENTF_EXTENDEDKEY Or IIf(wParam = WM_KEYUP, KEYEVENTF_KEYUP, 0), 0
sysKeyboardProc = 1
Exit Function
End If
End If
sysKeyboardProc = CallNextHookEx(fmMainKbdHook, nCode, wParam, lParam)
С NumLock все работает замечательно, с редиректом след.проблема:
на форме лежит textbox и события по нему тоже редиректятся форме и набора текста не происходит, а также BackSpace, Delete и т.д.
Посоветуйте, как выпутаться из ситуации?!