非高手不可的问题:如何解决钩子导致的无法进行输入法转换的问题?
我的程序中必须用到钩子,因为DHTMLEDIT无健盘返回值,而我要实现按CTRL+ENTER可以操作将DHTMLEDIT内容发送到其它地方.
但是产生一个问题:键盘钩子一旦运行,按CTRL+SHITF或CTRL+空白键就无法进行输入法转换了.
期待高手帮忙解决这个问题.
钩子如下:
[code=BatchFile]
Option Explicit
Private Const WH_KEYBOARD As Long = 2
Private Const VK_RETURN As Long = &HD
Private Declare Function SetWindowsHookEx Lib "USER32" Alias "SetWindowsHookExA" _
(ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function CallNextHookEx Lib "USER32" _
(ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function UnhookWindowsHookEx Lib "USER32" (ByVal hHook As Long) As Long
Public ActiveForm As Form '当前活动窗体
Private lHookCount As Long 'BeginHook/EndHook 计数
Private hHook As Long
Public Sub BeginHook()
If lHookCount = 0 Then '仅第一个需要执行挂钩
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf HookFunc, 0, App.ThreadID)
Debug.Print "SetWindowsHookEx()"
End If
lHookCount = lHookCount + 1
End Sub
Public Sub EndHook()
lHookCount = lHookCount - 1
If lHookCount = 0 Then '仅最后一个才执行解除挂钩
UnhookWindowsHookEx hHook
Debug.Print "UnhookWindowsHookEx()"
End If
End Sub
Public Function HookFunc(ByVal ncode As Long, ByVal Key As Long, ByVal Shift As Long) As Long
If ((Key = 17) And (kis = False) And (Not ActiveForm Is Nothing)) Or ((Key = 13) And (kis = True) And (Not ActiveForm Is Nothing)) Then
ActiveForm.OnEnter Shift
HookFunc = 1
Else
zzsr = 1
HookFunc = CallNextHookEx(hHook, ncode, Key, Shift)
End If
End Function
[/code]