要如何才能观察到 SetWindowsHookEx 的回传值, 又不会死机

bobogg 2015-06-25 06:10:52
在网上找了 键盘拦截的范例

它使用了 SetWindowsHookEx

并不是想拦截键盘

只是想观察 SetWindowsHookEx 的回传值

可是 vb ide 一执行后. 确实是可以看到 callback 极快的不停回传 nCode , wParam , lParam

确实是可以看到 nCode , wParam , lParam 的回传值

但是问题是 整个 windows 会立刻动弹不得 , 只能重新开机

把它改编译成 exe 档, 但是执行exe 档, 整个 windows 还是一样会动弹不得, 还是得重新开机

不知道 SetWindowsHookEx 要怎么写才能不会死机

范例撷取如下



Public Function SetHook() As Boolean
If hJournalHook = 0 Then
hJournalHook = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf JournalRecordProc, App.hInstance, 0)
End If
SetHook = True
End Function

Public Function JournalRecordProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If nCode Then
Debug.Print nCode, wParam, lParam, "A90"
End If
If nCode < 0 Then
JournalRecordProc = CallNextHookEx(hJournalHook, nCode, wParam, lParam)
Exit Function
End If
'ResolvePointer(SHptr).FireEvent nCode, wParam, lParam
Call CallNextHookEx(hJournalHook, nCode, wParam, lParam)
End Function



//=============================

有试过 SetWindowsLong 的拦截讯息, SetWindowsLong 完全不会发生死机啊







...全文
363 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-06-29
  • 打赏
  • 举报
回复
不能直接去掉,下面这句必须被调用。你Hook的规则先搞明白再做啊。
JournalRecordProc = CallNextHookEx(hJournalHook, nCode, wParam, lParam)

bobogg 2015-06-29
  • 打赏
  • 举报
回复
答案揭晓 (1) Call CallNextHookEx(hJournalHook, nCode, wParam, lParam) (2) JournalRecordProc = CallNextHookEx(hJournalHook, nCode, wParam, lParam) 用 (1) or (2) 都会死机 慢慢试出了死机的原因了 SetWindowsHookEx(12, AddressOf HkProc, App.hInstance, 0) --> 会死机 SetWindowsHookEx(12, AddressOf HkProc, App.hInstance, App.ThreadID) --> 不会死机 '=========== 心得 SetWindowsHookEx( ) CallBack 速度太快太快了 挂上它, 性能肯定下降
bobogg 2015-06-29
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
不能直接去掉,下面这句必须被调用。你Hook的规则先搞明白再做啊。
JournalRecordProc = CallNextHookEx(hJournalHook, nCode, wParam, lParam)
你的意思是我少了 JournalRecordProc = 这句是吗 我最早是写成 Call CallNextHookEx(hJournalHook, nCode, wParam, lParam) --> 那固范例是这养写的 我试试看在回报给您
bobogg 2015-06-26
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
你最后一句 Call CallNextHookEx 把返回值吞掉了啊。 许多需要返回值的 CallWndProc 调用不正常了啊。
感谢耶 code 来自 http://zhidao.baidu.com/question/54502685.html 下午电脑做完事后, 把 CallNextHookEx 杀掉, 再实验看看 再回报结果给您
Tiger_Zhao 2015-06-26
  • 打赏
  • 举报
回复
你最后一句 Call CallNextHookEx 把返回值吞掉了啊。
许多需要返回值的 CallWndProc 调用不正常了啊。
bobogg 2015-06-26
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
你最后一句 Call CallNextHookEx 把返回值吞掉了啊。
许多需要返回值的 CallWndProc 调用不正常了啊。


实验结果揭晓
还是没成功
差别在把 Call CallNextHookEx 杀掉后
程序还是异常, WinXp 虽会卡住, 但至少有办法叫出任务管理员, 藉由登出来解除危机

以下是 Call CallNextHookEx 的功能图
http://www.kab-studio.biz/Programing/Codian/DLL_Hook_SClass/0702.gif
根据 google 查到 CallNextHookEx 就是要 将钩子信息 传递到当前钩子链中的下一个子程
并不是会吞掉信息


如果使用 SetWindowsLong 拦截讯息, 下面一样会有一句 CallWindowProc 来往下继续传递消息
和 Call CallNextHookEx 目的是要往下继续传消息是一样的

一、项目简介 本项目(HF24075 SDFeatureRivertraining)是一套以多路 PWM 多彩 LED 灯光控制为核心的固件方案,基于 PADAUK PMS 系列单片机。方案对蓝、青、粉等多色 LED 进行独立 PWM 调光,实现呼吸、渐变、流水等细腻灯光效果,并支持按键切换与传感器交互。其 PWM 调光结构清晰,是学习单片机 PWM、色彩混合与灯光算法的理想范例。 核心应用场景: 1. 氛围灯 / 流水灯产品开发 2. PWM 调光与色彩混合学习 3. 电子类课程设计 / 毕业设计 4. 灯光艺术与 DIY 项目 适配使用场景:学习练手、毕业设计、课程设计、创业售卖、实操实训,突出实用性与可落地性。 二、硬件核心配置 · 主控芯片:PADAUK(应广科技)PMS 系列 8 位 OTP 单片机 · 外接外设: - 多色 LED 灯组(蓝 / 青 / 粉等多路独立 PWM) - 轻触按键(模式切换) - 传感器(交互触发) · 操控设备: - 机身实体按键操控 三、核心功能介绍 1. 多路独立 PWM 调光:蓝、青、粉等 LED 各自独立占空比控制,实现精准亮度; 2. 呼吸 / 渐变 / 流水效果:通过 PWM 变化曲线营造丰富灯光律动; 3. 按键切换模式:轻触在多种灯效间循环切换; 4. 传感器交互:外部传感信号触发或联动灯光变化; 5. 低功耗设计:闲置进入低功耗,按需唤醒。 6. 参数可配:亮灭周期、渐变速度等可调,便于定制。 四、项目优势与亮点 · 灯光细腻:多路独立 PWM,效果远胜简单开关灯。 · 算法清晰:呼吸 / 渐变实现简洁,易于理解与移植。 · 扩展性强:可轻松增加颜色与模式,适配各类灯饰。 ·

1,488

社区成员

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

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