小弟我的32位程序(用到了Hook技术)在64位OS下运行时遇到的有关问题
我的32位程序(用到了Hook技术)在64位OS下运行时遇到的问题!
我的程序是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 的消息,采用什么方式能实现?非常感谢高人指点!
------解决方案--------------------
我也碰到过这样的问题。看过些资料,动态库访问似乎是有你提到的问题。
------解决方案--------------------
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.
目前没有找到好的办法可以解决。
------解决方案--------------------
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.
没有好的方法可以解决。
------解决方案--------------------
所谓的HOOK,是把你的HOOK DLL注入到其他进程运行,64位进程当然无法加载32位DLL了
------解决方案--------------------
笨方法,32位、64位两个同时hook
比较好方法,编写驱动
------解决方案--------------------
32位、64位两个同时hook
你看spy++就分两个版本
------解决方案--------------------
看样两个都得写。
------解决方案--------------------
创建一个 跨平台的 dll.
然后使用 rundll32.exe 来调用。
这个 dll 来注入,注入后,使用进程间通讯与原来的程序交互。
我的程序是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 的消息,采用什么方式能实现?非常感谢高人指点!
------解决方案--------------------
我也碰到过这样的问题。看过些资料,动态库访问似乎是有你提到的问题。
------解决方案--------------------
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.
目前没有找到好的办法可以解决。
------解决方案--------------------
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.
没有好的方法可以解决。
------解决方案--------------------
所谓的HOOK,是把你的HOOK DLL注入到其他进程运行,64位进程当然无法加载32位DLL了
------解决方案--------------------
笨方法,32位、64位两个同时hook
比较好方法,编写驱动
------解决方案--------------------
32位、64位两个同时hook
你看spy++就分两个版本
------解决方案--------------------
看样两个都得写。
------解决方案--------------------
创建一个 跨平台的 dll.
然后使用 rundll32.exe 来调用。
这个 dll 来注入,注入后,使用进程间通讯与原来的程序交互。