非高手不可的问题:如何解决钩子导致的无法进行输入法转换的问题?

wslyjla 2009-02-15 06:32:55
我的程序中必须用到钩子,因为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]
...全文
140 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧