`
wsql
  • 浏览: 11754431 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

C#中来应用Hook

阅读更多

钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

关于Hook的详细介绍,在微软的MSDN中有,http://www.microsoft.com/china/community/program/originalarticles/techdoc/hook.mspx

下面是我在C#中来应用Hook:

实现效果:

当用户在TextBox中输入 b 的时候,TextBox 始终显示 a

实现过程:

1、新建一个C#的WindowsApplication

2、在Form1中,添加下面一些变量:

internal enum HookType //枚举,钩子的类型

{

//MsgFilter = -1,

//JournalRecord = 0,

//JournalPlayback = 1,

Keyboard = 2,

//GetMessage = 3,

//CallWndProc = 4,

//CBT = 5,

//SysMsgFilter = 6,

//Mouse = 7,

//Hardware = 8,

//Debug = 9,

//Shell = 10,

//ForegroundIdle = 11,

//CallWndProcRet = 12,

//KeyboardLL = 13,

//MouseLL = 14,

};

IntPtr _nextHookPtr; //记录Hook编号


3、在Form1中引入必须的API

[DllImport("kernel32.dll")]
static extern int GetCurrentThreadId(); //取得当前线程编号的API

[DllImport("User32.dll")]

internal extern static void UnhookWindowsHookEx(IntPtr handle); //取消Hook的API

[DllImport("User32.dll")]

internal extern static IntPtr SetWindowsHookEx(int idHook, [MarshalAs(UnmanagedType.FunctionPtr)] HookProc lpfn, IntPtr hinstance, int threadID); //设置Hook的API

[DllImport("User32.dll")]

internal extern static IntPtr CallNextHookEx(IntPtr handle, int code, IntPtr wparam, IntPtr lparam); //取得下一个Hook的API

4、声明一个实现的委托

internal delegate IntPtr HookProc(int code, IntPtr wparam, IntPtr lparam);

5、添加自己的Hook处理过程

IntPtr MyHookProc(int code, IntPtr wparam, IntPtr lparam)

{

if( code < 0 ) return CallNextHookEx(_nextHookPtr,code, wparam, lparam); //返回,让后面的程序处理该消息

if( wparam.ToInt32() == 98 || wparam.ToInt32() == 66 ) //如果用户输入的是 b

{

this.textBox1.Text = "a";

return (IntPtr) 1; //直接返回了,该消息就处理结束了

}

else

{

return IntPtr.Zero; //返回,让后面的程序处理该消息

}

}

6、添加加入Hook链和从Hook链中取消的函数

public void SetHook()

{

if( _nextHookPtr != IntPtr.Zero ) //已经勾过了

return;

HookProc myhookProc = new HookProc(MyHookProc); //声明一个自己的Hook实现函数的委托对象

_nextHookPtr = SetWindowsHookEx((int)HookType.Keyboard, myhookProc , IntPtr.Zero , GetCurrentThreadId()); //加到Hook链中

}

public void UnHook()

{

if( _nextHookPtr != IntPtr.Zero )

{

UnhookWindowsHookEx(_nextHookPtr); //从Hook链中取消

_nextHookPtr = IntPtr.Zero;

}

}

7、在Form1的Load事件中添加 SetHook() , 在Form1的closing 事件中添加 UnHook()

private void Form1_Load(object sender, System.EventArgs e)

{

SetHook();

}

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{

UnHook();

}

8、运行

输入 b , 发现 textbox 里面显示的是 a 了!

分享到:
评论

相关推荐

    C#中全局鼠标、键盘Hook的应用方法.doc

    C#中全局鼠标、键盘Hook的应用方法.doc

    锁定 屏蔽 鼠标左右键 c# 源码 钩子 hook应用 锁屏 锁系统

    锁定屏蔽鼠标左右键 c# 源码 钩子hook应用 锁系统

    Hook经典分析 关于QQ Hook的应用 钩子

    Hook经典分析 关于QQ Hook的应用 钩子

    C#钩子应用(附源码)

    C#中使用 Hook 的例子...

    SocketHook:用 C# 编写的 SocketHook

    SocketHook 用 C# 编写,仅支持 Windows(32 位应用程序) 如何使用 运行 RegisterCOMObjects.bat(以管理员身份) 运行 HookAPI.exe 参数 p=&lt;process&gt; s=&lt;bind&gt; d=&lt;forward&gt; (bind_address 可以替换为 0.0.0.0,...

    HookDemo.zip

    一个简单的Hook监听窗口键盘消息演示程序,使用C#开发,能正常运行使用,可用来学习Hook钩子应用。

    C#设置键盘钩子屏蔽键盘信息

    C#键盘勾子(Hook)拦截器,屏蔽键盘活动 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口...

    C# Hock 全局监听程序外的键盘和鼠标的事件

    c# hook钩子实现全局的鼠标点击可监听程序外的事件,单击,双击,滚轮,按键事件的触发,键盘按键的全局监听,鼠标的监听,程序可直接运行,供大家测试

    c#实现半透明模态框显示效果,带自己封装的HOOK

    简单实现窗体半透明,控件不透明效果,通过模态对话框显示。用两个窗体,下面一个窗体半透明,上面一个窗体背景却透明,实现效果...使用钩子捕获鼠标在半透明区域的点击事件,因为应用程序不响应半透明区域的鼠标消息。

    使用HOOK拦截任务管理器中直接杀进程的消息

    在这里,给大家一个Delphi的源码,使用HOOK进行拦截处理任务管理器来实现. 在附件的文档中包含了源码,共分为两个部分:exe测试部分,Dll部分(HookDll,unithook). 我已经亲自编译测试过,可以实现拦截任务管理器的消息. ...

    利用Hook技术实现键盘监控

    用Hook(即钩子)技术编写的应用程序添加到Windows的任务栏的指示区中就能够 很好的达到这个目的。我在参考了API帮助文档基础上,根据在Delphi开发环境中 的具体实现分别对这两部分进行详细论述。 一、Hook(钩子)的...

    进程防杀 HOOK ,防止任务管理杀死程序

    通过HOOK,防止任务管理器杀死进程,做到初步的进程保护

    实例详解c# 钩子函数拦截任务管理器.docx

    在C#中,我们可以使用钩子函数来拦截Windows操作系统产生的一些事件,例如鼠标、键盘或者窗口事件等。其中,窗口消息钩子(WH_CALLWNDPROC)是一种比较常见的钩子函数,它能够拦截窗口消息,并允许应用程序修改或阻止...

    HookDemo...进程隐藏 保护

    代码实现了进程隐藏与保护,通过hook系统函数。文件中包括内核级驱动及代码。应用程序级演示程序及代码。

    War3Hook 钩子链应用

    1.基于C#语言winform开发. 2.重写了Textbox基类,以实现按下Tab不切换到下一焦点,在文本框内显示按下的那个键的键码与keycode. 3.实现了全局键盘钩子,减少一键回城的时间间隔延迟(雨之神助的一键回城反应太慢),更快的...

    VB.NET全键盘鼠标Hook附测试

    全局键盘鼠标钩子,适用于VB.NET,可用VS进行测试,内附源码测试,有了这个应该可以学习钩子的建立,以及在主程序的调用

    SharpNeedle:将C#代码注入正在运行的进程

    一个将C#dll正确注入其他进程的项目。 注意:SharpNeedle当前仅支持32位进程。 欢迎您创建添加64位支持的请求请求。 基本原理 虽然仅将注入的自定义dll加载到目标进程的内存空间中很有趣,但这仅是故事的一半。 ...

    C# 鼠标 键盘钩子使用例子.zip

    C# 鼠标 键盘钩子使用例子.zip

    C#通过调用全局钩子来锁定键盘和鼠标有效保护视力源程序

    这是一个C#通过调用全局钩子来锁定键盘和鼠标的源程序,旨在防止长时间使用电脑而产生眼睛疲劳,造成视力下降而得不偿失。它是一款完整的小软件、源程序,能很好地说明hook的应用。

    C#键盘监听客户端

    使用hook监听全局的...另外有个小的应用监听PrintScreen操作,然后监听是否按下s键,若是则获取剪贴板的图片保存到文件中。文件路径可以通过配置文件设置。应用有客户端和Outlook插件两个版本。挺有意思的,分享下。

Global site tag (gtag.js) - Google Analytics