64位win7 + VS2010 采用32位编译Hook程序, Hook安装成功!返回成功,GetLastError() == 0但是执行时只能Hook到Windows桌面或本程序的按键, 其它程序上的按键Hook不到连IE和Notepad都Hook不到但64位编译, Release和Debug都无此问题32位编译时,Release和Debug都有此问题

解决方案 »

  1.   

    和地址空间有关系吧,32bit程序的最大寻址空间为4GB,而64bit程序为16EB已经远超过32bit寻址空间,因此对于Hook等可能会失败
      

  2.   

    楼主请看MSDN解释: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. 
      

  3.   

    可是我的应用并不存在32位dll向64位进程注入,也不存在64位dll向32位进程注入, 我是向自己的exe注入的HookDll, 编译时都是编译的环境 ,64位编译都是64位编译, 32位都是32编译啊.
      

  4.   

     我是64位win7 + VS2010,用32位编译时失效的百度看到有很多人同到这个问题,但是没有解决方案
    http://www.baidu.com/s?bs=SetWindowsHookEx+win7&f=8&wd=+win7+SetWindowsHookEx%CA%A7%D0%A7&n=2
      

  5.   

    和这个应该是同一个问题:http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763104687270e54f7216b818b5e68d4e419ce3b46001d3ba6fd7d62475785d27c1043f50b4beb84746536752ab39ccc8e4ac9fecf687987626f2c0b873117c419de911b789837912afede6af0c9f525e3acc5a5ae&p=8b2a960f8bd50aff57ebce3a50&user=baidu