【问】如何回传结构数据到CallNextHookEx?

VBAHZ 2017-07-21 05:00:44
用WH_KEYBOARD_LL钩子,在回调中得到结构:
Dim P As KBDLLHOOKSTRUCT

'lParam 指向KBDLLHOOKSTRUCT结构的指针
Call CopyMemory(P, ByVal lParam, LenB(P))

请问,我修改了P的内容后,如何再回传给下一个钩子

Call CallNextHookEx(nCode,wParam,lParam(P??)

...全文
4856 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-07-26
  • 打赏
  • 举报
回复
引用 4 楼 VBAHZ 的回复:
. . . . . . . 是不是也因为无法代码注入,从而无法把修改后的数据传给下一个钩子?
先别说“跨进程”的,即使对“本进程”也没有效果啊! 你可以试试: 自己画个Text控件,程序运行、安装钩子, 然后在Text中输入字符,可以看到: 即使在钩子过程中更改了按键信息,也并没有起到“改”的作用。 我也看了“响应秩序”: 钩子的响应,确实在Text的控件事件之前!
舉杯邀明月 2017-07-26
  • 打赏
  • 举报
回复
没想明白为什么会没有效果。 先前试了一下,我不仅更改了vkCode,并且还把键盘扫描码也“同步更正”了的,也没效果。 (我不是copymemory后再改数据,而是直接改lParam指向的数据区) 难道系统在后面发送键盘消息时,并不以“钩子数据”为准,而是以原始键盘数据为准? (传递钩子消息的数据只是一个“副本”,给钩子处理完之后直接丢弃?) 如果是这样,那“底层HOOK”又有多大的实际意义呢………… 难道就是为了方便“木马”搞键盘记录吗!
赵4老师 2017-07-26
  • 打赏
  • 举报
回复
汇编指令面前,了无秘密。 http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
VBAHZ 2017-07-26
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
坊间传闻,SetWindowsHookEx必须放在DLL中。
有某些全局钩子可以不依赖于任何DLL而正常工作的。这些钩子包括,WH_JOURNALPLAYBACK,WH_JOURNALRECORD,WH_KEYBOARD_LL,WH_MOUSE_LL。为什么这些钩子可以不依赖于DLL而正常工作呢?我们可以从MSDN中得到答案,MSDN中对于这四种钩子都这样的描述“This hook is called in the context of the thread that installed it.”,翻译成中文意思是钩子函数的调用是在安装钩子的线程上下文中进行的,说得更明白些,意思就是这些钩子是在哪个线程当中安装的,其钩子函数就在哪个线程中执行。所以使用这四种钩子是达不到代码注入的效果的,当然也就可以不依赖于任何DLL了。MSDN中只对个别钩子指出了必须还是没有必要使用DLL。 是不是也因为无法代码注入,从而无法把修改后的数据传给下一个钩子?
VBAHZ 2017-07-26
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
汇编指令面前,了无秘密。 http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
不明觉厉好东西啊,虽然现在不懂,但收藏先 :)
VBAHZ 2017-07-26
  • 打赏
  • 举报
回复
引用 7 楼 Chen8013 的回复:
[quote=引用 4 楼 VBAHZ 的回复:] . . . . . . . 是不是也因为无法代码注入,从而无法把修改后的数据传给下一个钩子?
先别说“跨进程”的,即使对“本进程”也没有效果啊! 你可以试试: 自己画个Text控件,程序运行、安装钩子, 然后在Text中输入字符,可以看到: 即使在钩子过程中更改了按键信息,也并没有起到“改”的作用。 我也看了“响应秩序”: 钩子的响应,确实在Text的控件事件之前! [/quote] 非常同意,因为试过,就是这种情况,连自己的进程都没法改, 所以疑问啊.... 网上搜了半天,这么多年来,难道没任何人发现这个问题吗?
VBAHZ 2017-07-26
  • 打赏
  • 举报
回复
引用 6 楼 Chen8013 的回复:
没想明白为什么会没有效果。 先前试了一下,我不仅更改了vkCode,并且还把键盘扫描码也“同步更正”了的,也没效果。 (我不是copymemory后再改数据,而是直接改lParam指向的数据区) 难道系统在后面发送键盘消息时,并不以“钩子数据”为准,而是以原始键盘数据为准? (传递钩子消息的数据只是一个“副本”,给钩子处理完之后直接丢弃?) 如果是这样,那“底层HOOK”又有多大的实际意义呢………… 难道就是为了方便“木马”搞键盘记录吗!
老大仔细啊,说实话,俺还真没想到把扫描码也同步更正,大意了大意了, 只是试过,用全局变量的方式传数据,结果------当然-------没戏:(
赵4老师 2017-07-25
  • 打赏
  • 举报
回复
坊间传闻,SetWindowsHookEx必须放在DLL中。
VBAHZ 2017-07-21
  • 打赏
  • 举报
回复
但没反应啊!
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long

启动
mHook=SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HookKbProc, App.hInstance, 0)

回调函数,收A,转发为B,
Public Function HookKbProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim uP As KBDLLHOOKSTRUCT
If nCode < 0 Or nCode > 0 Then
ExLine:
HookKbProc = CallNextHookEx(0, nCode, wParam, lParam) '将消息传给下一个钩子 '本函数返回值,由下一钩子决定
Exit Function
End If
Call CopyMemory(uP, ByVal lParam, LenB(uP))
With uP
If .vkCode = vbKeyA Then
.vkCode = vbKeyB
Debug.Print "A>B"
End If
End With
HookKbProc = CallNextHookEx(0, nCode, wParam, ByVal VarPtr(uP))
End Function
舉杯邀明月 2017-07-21
  • 打赏
  • 举报
回复
既然是“指针”,传:byval Varptr(P)就行了。
源码链接: https://pan.quark.cn/s/a4b39357ea24 微信小程序是由腾讯公司设计的一种轻量级应用开发平台,主要面向移动设备,旨在为用户带来无需下载安装即可直接使用的应用服务体验。在微信小程序的开发实践中,"模仿美团菜单 swiper分类菜单"是一项常见的技术应用,其目的是达成与美团外卖应用相似的交互模式,使用户能够轻松地浏览和挑选各种商品或服务。 在微信小程序的技术体系中,`swiper`组件属于轮播图功能模块,通常用于呈现多张图片或卡片式的切换界面,能够达成动态滑动展示不同分类菜单的功能。在模拟美团菜单的应用情境下,`swiper`组件一般与`swiper-item`组件协同工作,每一个`swiper-item`对应一个分类,用户可通过左右滑动来切换不同的分类菜单。 为了达成这样的功能,首先需要在微信小程序的`json`配置文档中引入`swiper`组件,并在`wxml`结构文档中构建相应的布局代码,将每个分类以`swiper-item`的形式进行组织。同时,需要在`wxss`样式文档中定义恰当的样式,保证分类菜单的视觉呈现符合设计规范。 接下来,我们将在`js`逻辑文档中处理`swiper`的切换逻辑,通过监听`bindchange`事件来识别当前选中的分类,并根据这一信息动态获取对应的子菜单信息。为了达成类似美团的层级菜单功能,可能还需要借助`picker`或`navigator`组件来展示二级分类或商品详情。 在开发阶段,需要关注以下关键点: 1. 数据绑定:保证数据与界面之间的双向链接准确无误,以便在选择分类时即时更新显示内容。 2. 动态加载:针对大量数据,可能需要采取异步加载机制,防止一次性加载过多内容引发性能瓶颈...
代码下载地址: https://pan.quark.cn/s/72bd50ecb2fb 《微信飞机大战素材详解》 微信飞机大战作为一款广受欢迎的休闲游戏,凭借其便捷的操作方式和紧张刺激的游戏过程,赢得了众多用户的青睐。本文将系统性地剖析这款游戏的关键素材,旨在帮助开发者全面掌握游戏的设计理念与实现方法。 我们聚焦于游戏的核心构成——"AirplaneResource"。此名称一般指向游戏资源库,其中收纳了游戏中所有的视觉素材、音频资料以及动画元素。在微信飞机大战的语境下,这些资源构成了游戏画面呈现、音效播放和动态效果的基础。 1. **图像素材**:游戏中的飞机造型、敌方单位、弹药以及爆炸效果等视觉元素,均以图像素材的形式进行展示。图像素材通常涵盖PNG或JPG格式的静态图片,也包括GIF或APNG格式的动态图片。开发者需要细致地设计并优化这些图像,确保在各种设备上都能实现流畅的渲染,同时维持视觉表现力。 2. **声音素材**:游戏的背景音乐、射击音效、爆炸声等音频片段,对于构建游戏氛围具有决定性作用。这些音频文件可能以MP3、WAV或OGG格式进行存储,开发者需要权衡音频的压缩程度与音质,以确保在不牺牲游戏体验的前提下,有效控制文件体积。 3. **动画序列**:飞机的飞行轨迹、攻击动作、爆炸过程等动态表现,通常借助序列帧动画技术实现。这些序列帧图片组合而成的动画,通过编程控制播放速率和顺序,为游戏增添生动的动态效果。 4. **物理接触判定**:游戏中飞机与弹药之间的接触判定,是通过算法完成的。开发者可能会采用基础的矩形接触判定或更精密的像素级接触判定,以保证游戏的公平性和挑战性。 5. **游戏规则**:微信飞机大战的得分机制、生命值系统、敌机生成逻辑等...

1,488

社区成员

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

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