一个键盘钩子,开始还好,不过奇怪地发现在VISUAL STUDIO下按了什么都没反映。
还以为是VS做了一定的处理,后来一想,可能是不同用户权限问题,果然,凡是以管理员启动的窗口都没截获到
消息。
不知道有没什么处理方法??

解决方案 »

  1.   

    Windows钩子程序以管理员启动,那有不以管理员启动的程序呢?
      

  2.   

    默认的程序都是以当前登陆用户的身份启动吧,vista以后右击可以选择以管理员身份运行。
      

  3.   

    你用钩子的时候如果不是全局底层钩子是一定要有dll注入到目标进程的。在VISTA之后的操作系统,权限控制的很严格。你这个情况可能是因为你的程序的权限低于目标程序的权限,导致钩子无法正确的注入到目标进程空间导致的。解决方法就是在你的工程中,右键属性,连接器,清单文件,然后把UAC级别改为requireAdministrator  或者嵌入manifest,赋予本应用程序requireAdministrator权限 ,重新编译之后,直接运行你的程序就拥有requireAdministrator权限了。 这样就可以正确安装钩子。
      

  4.   

    钩子失效,很有可能是因为你的IE7 。
    IE7会自动让钩子失效,原因我忘记了,反正是出于安全考虑。
    还有一些高安全的程序,会让钩子失效。
      

  5.   

    这个问题我以前也遇到过。问题不在于你的钩子。而是你注册消息的问题。在vista以上版本注册消息ChangeWindowMessageFilter(RegMes,MSGFLT_ADD); 通过这种方式才行。不过注意一点。在xp下用这个会运行时错误。不过可以把这个放到一个dll中。动态链接这个dll(静态会出错),先判断操作系统版本。vista以上的调这个库
      

  6.   

    很具体了啊。只要ChangeWindowMessageFilter(你的消息名,MSGFLT_ADD);这样就可以提升你消息的权限,然后按照我说的步骤这样弄。如果你不用考虑xp和win7都要跑的话每必要加个dll
      

  7.   

    你说的:凡是以管理员启动的窗口都没截获到 
    消息。 
    你是注册了一个消息吗?如果是注册了一个消息的话,要用ChangeWindowMessageFilter添加进可信队列提高权限在ie上才能跑。这个和我遇到的问题一样。我也是在dll中定义了一个钩子。发消息和ap交互,一开始在win7的ie上不行调试发现是消息发不过去。用这样的方式解决了。你可以尝试下
      

  8.   

    不是消息,是通过共享内存和AP通信的。
    在一些管理员启动的窗口按了特定的键后钩子并没有反应。
    QQ09也有这个情况,在管理员启动的VS中,按热键启动QQ,也是没反应
      

  9.   

    // 分配虚拟内存.
        LPVOID lpBaseAddress;
        lpBaseAddress = VirtualAllocEx(hProcess, 0, BUFFER_SIZE, 
                      MEM_COMMIT, PAGE_READWRITE);  
    那你有没在目标进程中分配内存?
      

  10.   

    你确定dll加载了?人家自己hook一下LdrLoadMoudle你钩个屁呀钩,都不知道自己的问题出在哪里了就开始解决问题了
      

  11.   

    我的意思是,比如我对QQ设置的热键SHIFT+Z启动QQ界面。
    如果在管理员模式打开的VS中按热键会无效。
    其他管理员启动的程序都一样而我自己用钩子设置的热键在QQ对话框中按的话还是有效的。项目经理说年后再想办法,谢谢大家的回复!