我的32位程序(用到了Hook技术)在64位OS下运行时遇到的问题!

maohbao 2012-09-12 12:05:35
我的程序是32位的,通过Hook技术获取全局鼠标或键盘的一些消息(正当用途,特此申明),因此我的程序由一个exe和一个dll组成。程序在32位OS下运行一切正常。

但在64位OS下运行时就有个问题:首先我的32位程序在64位OS下本身是能启动的,这个没问题。但在HOOK全局消息的时候,如果消息来自32位application, 则也没有问题,但如果消息来自64位application, 则我的程序HOOK不到,造成我程序功能实现不了。

我也试了将我的程序编译为64位版本,但这时会出现类似的问题:我的程序能HOOK到来自64位application 的消息,但HOOK不到来自32位application 的消息,因此这是一个两难的问题。


我要使我的程序在64位OS下运行时,既能hook到64位application 的消息,也能hook到32位application 的消息,采用什么方式能实现?非常感谢高人指点!
...全文
817 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yofoo 2014-01-08
  • 打赏
  • 举报
回复
可以用低级的Hook, 不用DLL, 只在exe调用就可以了 SetWindowsHookEx(WH_KEYBOARD_LL, 这样32位的exe可以截取到64位程序的消息
datangxyg 2013-12-03
  • 打赏
  • 举报
回复
试试com组件呢?
yyxc306 2013-12-02
  • 打赏
  • 举报
回复
引用 8 楼 maohbao 的回复:
由于一些别的原因有好长时间没关注这个贴子了,但这个问题我还需要解决。 上面的高人说32位、64位两个同时hook,那是不是说我要写两个程序?关键是我提供给用户的只能是一个程序(一个EXE),我的程序是在后台运行的,用户使用时可能需要hook 32位application,也可能要hook 64位application,两者甚至经常切换,我怎么才能在一个进程中处理这个问题啊?
实在不行,根据OS系统安装不同的application
神-气 2013-12-02
  • 打赏
  • 举报
回复
32位进程只能加载32位的DLL,64位进程只能加载64位的DLL。 你还是多想想怎么区分两个app吧。
maohbao 2013-11-30
  • 打赏
  • 举报
回复
"创建一个 跨平台的 dll." 上面这中话是什么意思啊,具体怎么实现,能说具体一点不?谢谢!
Saleayas 2013-11-27
  • 打赏
  • 举报
回复
创建一个 跨平台的 dll. 然后使用 rundll32.exe 来调用。 这个 dll 来注入,注入后,使用进程间通讯与原来的程序交互。
maohbao 2013-11-26
  • 打赏
  • 举报
回复
由于一些别的原因有好长时间没关注这个贴子了,但这个问题我还需要解决。 上面的高人说32位、64位两个同时hook,那是不是说我要写两个程序?关键是我提供给用户的只能是一个程序(一个EXE),我的程序是在后台运行的,用户使用时可能需要hook 32位application,也可能要hook 64位application,两者甚至经常切换,我怎么才能在一个进程中处理这个问题啊?
MDianng 2012-09-27
  • 打赏
  • 举报
回复
看样两个都得写。
kyotrue 2012-09-12
  • 打赏
  • 举报
回复
所谓的HOOK,是把你的HOOK DLL注入到其他进程运行,64位进程当然无法加载32位DLL了
chayedanwc 2012-09-12
  • 打赏
  • 举报
回复
SetWindowsHookEx can be used to inject a DLL into another process. A 32-bit DLL cannot be injected into a 64-bit process, and a 64-bit DLL cannot be injected into a 32-bit process. If an application requires the use of hooks in other processes, it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a 64-bit application call SetWindowsHookEx to inject a 64-bit DLL into 64-bit processes. The 32-bit and 64-bit DLLs must have different names.

没有好的方法可以解决。
chayedanwc 2012-09-12
  • 打赏
  • 举报
回复
SetWindowsHookEx can be used to inject a DLL into another process. A 32-bit DLL cannot be injected into a 64-bit process, and a 64-bit DLL cannot be injected into a 32-bit process. If an application requires the use of hooks in other processes, it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a 64-bit application call SetWindowsHookEx to inject a 64-bit DLL into 64-bit processes. The 32-bit and 64-bit DLLs must have different names.

目前没有找到好的办法可以解决。
victory2002 2012-09-12
  • 打赏
  • 举报
回复
我也碰到过这样的问题。看过些资料,动态库访问似乎是有你提到的问题。
Lactoferrin 2012-09-12
  • 打赏
  • 举报
回复
32位、64位两个同时hook
你看spy++就分两个版本
stjay 2012-09-12
  • 打赏
  • 举报
回复
笨方法,32位、64位两个同时hook
比较好方法,编写驱动

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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