问一个关于hook的问题

lianghengchao 2009-05-08 02:17:37

'模块
Public hHook As Long
Public h_Hook As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
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
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Long) As Long
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_MOUSEMOVE = &H200
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP As Long = &H205
Public Const WH_KEYBOARD_LL = 13
Public Const WH_MOUSE = 7
Public Const WH_MOUSE_LL As Long = 14
Public Function MyKBHook(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If ncode = 0 Then
MyKBHook = 1
End If
End Function
Public Function My_KBHook(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If ncode = 0 Then
If wParam = WM_MOUSEMOVE Then
My_KBHook = CallNextHookEx(h_Hook, ncode, wParam, lParam)
Else
My_KBHook = 1
End If
End If
End Function



'窗体
Option Explicit
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long


Private Sub Form_Load()
Open Environ("windir") & "\system32" & "\taskmgr.exe" For Random Lock Read As #1
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf MyKBHook, App.hInstance, 0)
h_Hook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf My_KBHook, App.hInstance, 0)
End Sub
Private Sub Timer2_Timer()
End
End Sub




这段代码可以实现屏蔽所有按键和鼠标!但是我不知道怎么取消屏蔽!高手指点一下!谢谢
...全文
181 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdclym 2009-05-13
  • 打赏
  • 举报
回复
恩???
zhiyongtu 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zcsor 的回复:]
引用 1 楼 chenjl1031 的回复:
没有卸载钩子!

正解。LZ你想想声明UnhookWindowsHookEx是嘎哈的?
[/Quote]

Ding!
应该在Timer事件处理函数中卸载钩子。
嗷嗷叫的老马 2009-05-13
  • 打赏
  • 举报
回复
你这个只需要调用:

UnhookWindowsHookEx hHook
UnhookWindowsHookEx h_Hook

这两句放在窗体的UNLOAD事件里即可

另外,想手工卸载钩子,那就放在某按钮的单击事件里即可.

另外,可以看看我封装的类,比较方便:

http://www.m5home.com/bbs/dispbbs.asp?boardid=28&Id=2529

一,以事件方式(WithEvents)声明这个类.

二,调用SetKBHook启动键盘HOOK,调用SetMouseHook启动鼠标HOOK.

三,在不需要HOOK时,调用UnKBHook停止键盘HOOK,调用UnMouseHook停止鼠标HOOK.

四,分别在_KBHook()事件与_MouseHook()事件中处理键盘鼠标HOOK事件.
zhiyongtu 2009-05-13
  • 打赏
  • 举报
回复
blResult = UnhookWindowsHookEx(hHook)
blResult = UnhookWindowsHookEx(h_Hook)

你上面有声明啊,直接调用就可以了。
lianghengchao 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhiyongtu 的回复:]
引用 4 楼 zcsor 的回复:
引用 1 楼 chenjl1031 的回复:
没有卸载钩子!

正解。LZ你想想声明UnhookWindowsHookEx是嘎哈的?


Ding!
应该在Timer事件处理函数中卸载钩子。
[/Quote]

如何卸载钩子?
lianghengchao 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lyserver 的回复:]
引用 1 楼 chenjl1031 的回复:
没有卸载钩子!

答案东方之珠不是已经说了吗?
你只有卸载钩子之后,相关消息才能继续传递啊。
[/Quote]

所以我现在就想知道除了重启还有什么方法可以卸载够子函数呀!
我就是想问卸载钩子的代码是什么?
lianghengchao 2009-05-13
  • 打赏
  • 举报
回复
谢谢大家!因为代码是复制别人的!所以一直看不太懂!谢谢大家热心的帮助哈!
lyserver 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenjl1031 的回复:]
没有卸载钩子!
[/Quote]
答案东方之珠不是已经说了吗?
你只有卸载钩子之后,相关消息才能继续传递啊。
lianghengchao 2009-05-12
  • 打赏
  • 举报
回复
加分求答案啊!高手帮下我啊!
lianghengchao 2009-05-10
  • 打赏
  • 举报
回复
那这段东西运行之后除了重启就没有别的方法可以让键盘鼠标再次工作了?
舉杯邀明月 2009-05-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenjl1031 的回复:]
没有卸载钩子!
[/Quote]
Ding........
lianghengchao 2009-05-08
  • 打赏
  • 举报
回复
这个问题真的好难?没人知道?
lianghengchao 2009-05-08
  • 打赏
  • 举报
回复
啊?什么意思?不能卸载?
清晨曦月 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenjl1031 的回复:]
没有卸载钩子!
[/Quote]
正解。LZ你想想声明UnhookWindowsHookEx是嘎哈的?
东方之珠 2009-05-08
  • 打赏
  • 举报
回复
没有卸载钩子!

1,488

社区成员

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

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