Delphi hook 需要一个Demo

风之空 2016-10-13 06:17:59
最近在学习Hook API相关内容,网上的资料特别凌乱,连能正常运行的代码都没有多少,希望得到各位的帮助,谢谢。
我需要一个功能很简单的Demo,一个全局钩子,勾取MessageBoxW这个API,一旦勾取到,弹出提示框:拦截到MessageBox,是否允许通过? 点击是,弹出原本要显示的MessageBox,点击否,直接结束。
希望各位能够帮帮我,十分感激。
...全文
446 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我记得以前csdn上就有人发过一个API HOOK监视窗口闪烁的例子,你找找吧,应该有。
风之空 2016-10-14
  • 打赏
  • 举报
回复
抱歉,可能我的描述有点不清晰,简单的键盘和鼠标钩子我基本掌握了 我现在对Hook遇到的瓶颈是这样的 1.当某个API发生时,拦截消息 2.做出自己的处理 3.恢复原本的处理 一般的键盘与鼠标钩子都只是做到了1和2,并没有进行到3,现在我想要了解的就是如何进入到第三步 思路基本是在第二步与第一步之间保存Api处理函数的地址,用自己的处理函数来替代,然后在第三步返回原本的处理函数地址,我需要一个能运行的Demo 自己查了很久,可能基础不好,网上的一些资料没有看懂,希望有个简单的Demo作为起点,谢谢各位
lyhoo163 2016-10-14
  • 打赏
  • 举报
回复
风之空 2016-10-14
  • 打赏
  • 举报
回复
引用 4 楼 DelphiGuy 的回复:
你这个要求是API HOOK,不是键盘鼠标钩子,也不需要用SetWindowsHookEx,只需要用GetModuleHandle、GetProcAddress获得要hook的函数地址,然后修改函数前几个字节(ReadProcessMemory、WriteProcessMemory,先保存)跳转到自己的处理过程就可以了,差不多就是DOS时代的中断挂钩技术。
恩,应该就是你说的这个了,请问能给个简单的Demo吗,我找到的资料和您描述的差不多,但在 跳转到自己的处理过程 和 恢复原本的处理过程 这两个地方不理解。 举个例子,我想要做的是类似这样的: \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ =》点击是,替换成B处理 A=》(自己要做的处理)弹出提示框,是否打开 ===========================》[拦截,替换自己的处理方式A] =》点击否,结束 打开A程序(例如调用ShellExec) B=》(原本的处理)打开A程序 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 这里拦截后只能做一种处理,要么做A,要么做B,在替换成A后还能再后面点击是后恢复成B的处理并成功打开程序吗? 表达能力有限,不知道您理解我的意思没有,希望得到您的帮助,谢谢。
  • 打赏
  • 举报
回复
你这个要求是API HOOK,不是键盘鼠标钩子,也不需要用SetWindowsHookEx,只需要用GetModuleHandle、GetProcAddress获得要hook的函数地址,然后修改函数前几个字节(ReadProcessMemory、WriteProcessMemory,先保存)跳转到自己的处理过程就可以了,差不多就是DOS时代的中断挂钩技术。
npkaida 2016-10-13
  • 打赏
  • 举报
回复
设置全局鼠标钩子。delphi 开发 Windows API 钩子示例程序,取自《Delphi Win32核心API参考》一书

1,183

社区成员

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

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