http://www.csharpwin.com/csharpspace/3766r5747.shtml

在.net 2005平台下 在使用全局hook时,总是遇见SetWindowsHookEx的返回值为0,而且在:
DllImport的SetLastError选项 = true的时候,调用Marshal.GetLastWin32Error() 也返回0,那么就看看是否这个原因:因为VS的调试模式的问题。

1.试试禁用宿主进程能否解决:

1). 在 Visual Studio 中打开项目。
2). 在“项目”菜单上单击“属性”。
3). 单击“调试”选项卡。
4). 清除“启用 Visual Studio 宿主进程”复选框。

2.或者,使用WINDOWS API函数代替获取当前实例的函数:

用:
[DllImport("kernel32.dll")]
public static extern IntPtr GetModuleHandle(string name);

GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName)

代替:
Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0])

当作 SetWindowsHookEx 的第三个参数: IntPtr hInstance

3. 如果程序可以成功安装键盘或鼠标的钩子,但是总是钩不到键盘和鼠标、或者回调函数一直不被回调,请尝试:

1) 检查你的项目是不是窗口应用程序(控制台程序不行),回调函数最好在主窗体的类中。原因似乎因为全局钩子回调需要寄宿在一个线程上,但是控制台应用程序中获得的当前实例(IntPtr hInstance)或许并不是当前程序的实例,而是一个控制台窗口的实例,回调的时候当然找不到回调函数了。

2) 是否使用的是这两个钩子”WH_KEYBORAD_LL 和 WH_MOUSE_LL“,而不是”WH_KEYBORAD和WH_MOUSE_LL“。因为在C#这种managed环境下,如果想实现全局钩子就必须使用low-level的hook。

C#使用全局钩子(hook),SetWindowsHookEx返回0、不回调的解决的更多相关文章

  1. MFC线程钩子和全局钩子[HOOK DLL]

    第一部分:API函数简介 1.       SetWindowsHookEx函数 函数原型 HHOOK SetWindowsHookEx( int idHook,        // hook typ ...

  2. 常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

    常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战. PS:上面是操作.最后是原理 一丶需要了解的API 使用全局钩子注入.我们需要了解几个WindowsAPI. ...

  3. 【C#】解决MouseHook捕获鼠标动作,在有些电脑上SetWindowsHookEx失败返回0的问题

    原文:[C#]解决MouseHook捕获鼠标动作,在有些电脑上SetWindowsHookEx失败返回0的问题 最近在debug鼠标位置捕获的功能时发现在其中的一台开发电脑上,SetWindowsHo ...

  4. django基础之day09,创建一个forms表单组件进行表单校验,知识点:error_messages,label,required,invalid,局部钩子函数,全局钩子函数, forms_obj.cleaned_data,forms_obj.errors,locals(), {{ forms.label }}:{{ forms }},{{ forms.errors.0 }}

    利用forms表单组件进行表单校验,完成用户名,密码,确认密码,邮箱功能的校验 该作业包含了下面的知识点: error_messages,label,required,invalid,局部钩子函数,全 ...

  5. C# 钩子HOOK专题(1)

    目录   基本概念 运行机制 钩子类型 作者 基本概念   钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程 ...

  6. 钩子(hook)编程

    一.钩子介绍 1.1钩子的实现机制 钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术.下图是windows应用程序传递消息的过程: 如在键盘中按下一键,操作系 ...

  7. 钩子(hook)

    钩子(hook)编程     钩子(hook)编程 一.钩子介绍 1.1钩子的实现机制 钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术.下图是windows ...

  8. mfc HackerTools全局钩子

    钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术. 如在键盘中按下一键,操作系统将收到键按下消息,把消息放入消息队列,然后消息队列对消息进行派发,发给相应的应 ...

  9. 安全之路 —— 使用Windows全局钩子打造键盘记录器

    简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...

随机推荐

  1. iOS地图----MapKit框架

    1.MapKit框架使用前提 ①导入框架 ②导入主头文件 #import <MapKit/MapKit.h> ③MapKit框架使用须知 MapKit框架中所有数据类型的前缀都是MK Ma ...

  2. Asp.Net MVC之 自动装配、动态路径(链接)等

    一.Model层 using System; using System.Collections.Generic; using System.Linq; using System.Web; namesp ...

  3. python3.x 判断当前版本【简单版】

    import sys,string Major_Version_Number = 0 #当前python的主版本 Minor_Version_Number = 0 #当前python的次版本 def ...

  4. leetcode_951. Flip Equivalent Binary Trees_二叉树遍历

    https://leetcode.com/problems/flip-equivalent-binary-trees/ 判断两棵二叉树是否等价:若两棵二叉树可以通过任意次的交换任意节点的左右子树变为相 ...

  5. AutoIt简单使用

    以上是自己在公司做培训的PPT首页,其实在线的中文参考文档很全面,很值得学习的.

  6. JavaScript 原生代码找对象的方法

    1. id :  document.getElementById('id') 2. 标签 : document.getElementsByTagName('标签') //获得的是一个标签数组 3. N ...

  7. vue组件之this指向问题

    [问题描述] 返回顶部组件里,用到数据操作.通过方法里改动this数据,但发现直接使用失效 mounted() { window.onscroll=function(){ ) { this.isAct ...

  8. 三个层面学playbook(核心)

    三个层面学playbook(核心) ansible-playbook是ansible工具中的核心,对比ad-hoc(ansible)命令,可以把playbook理解为一系列动作的组成,结果传递.判断等 ...

  9. intellij idea集成github

    IDEA配置github并上传项目 http://www.cnblogs.com/jinjiyese153/p/6796668.html github ssl验证 https://www.cnblog ...

  10. 神经机器翻译(NMT)开源工具

    博客地址:http://blog.csdn.net/wangxinginnlp/article/details/52944432 工具名称:T2T: Tensor2Tensor Transformer ...