知识大全 纯C#钩子实现及应用

Posted

篇首语:秤砣虽小,能压千斤。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 纯C#钩子实现及应用相关的知识,希望对你有一定的参考价值。

纯C#钩子实现及应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  要实现系统钩子其实很简单 调用三个Win 的API即可     SetWindowsHookEx 用于设置钩子 (设立一道卡子 盘查需要的信息)

  [DllImport( user dll CallingConvention = CallingConvention StdCall )]    public static extern IntPtr SetWindowsHookEx ( WH_Codes idHook HookProc lpfn     IntPtr pInstance int threadId );

  CallNextHookEx 用于传递钩子(消息是重要的 所以从哪里来 就应该回到哪里去 除非你决定要封锁消息)

  [DllImport( user dll CallingConvention = CallingConvention StdCall )]    public static extern int CallNextHookEx ( IntPtr pHookHandle int nCode     Int wParam IntPtr lParam );

  UnhookWindowsHookEx 卸载钩子(卸载很重要 卡子设多了会造成拥堵)    [DllImport( user dll CallingConvention = CallingConvention StdCall )]    public static extern bool UnhookWindowsHookEx ( IntPtr pHookHandle );

  在《HOW TO 在 Visual C# NET 中设置窗口挂钩》一文中有如下描述 在 NET 框架中不支持全局挂钩    您无法在 Microsoft NET 框架中实现全局挂钩 若要安装全局挂钩 挂钩必须有一个本机动态链接库 (DLL) 导出以便将其本身插入到另一个需要调入一个有效而且一致的函数的进程中 这需要一个 DLL 导出 而 NET 框架不支持这一点 托管代码没有让函数指针具有统一的值这一概念 因为这些函数是动态构建的代理 网上查找了很多代码 大都另外包含了一个C++的DLL 用于标识包含lpfn所指的子程的DLL 似乎也验证了这一说法

  但实际上并非如此 使用如下代码即可实现全局钩子     IntPtr pInstance = Marshal GetHINSTANCE( Assembly GetExecutingAssembly() ManifestModule );    Win API SetWindowsHookEx( WH_MOUSE_LL m_MouseHookProcedure pInstance );注 ManifestModule属性是 Net Framework 中新增加的 所以当你依然使用 Net Framework x的时候 可以使用GetModules方法获取当前程序集的所有模块 然后用其中的一个作为GetHINSTAN方法的参数 来获得合适的句柄指针

  钩子应用DEMO-屏幕放大器

  点击下载可执行文件(Shift + Esc 退出程序)    点击下载源文件

  所谓屏幕放大器 类似与WINDOWS系统中的辅助工具中的放大镜     前两天在找资料的时候突然发现在 中 Graphics类多了一个CopyFromScreen方法 可以直接实现屏幕抓取 于是有了做屏幕放大器的想法

  首先我定义了是SKHOOK类 来截取键盘及鼠标     由于需要获得全局的鼠标消息来确定截屏位置 同时要建立一个全局的快捷键来退出程序 所以只能用上面说的钩子来实现

  然后我通过鼠标点来设置采样区域 以及窗体的位置     采样区域为鼠标点为中心的 * 的矩形区域 窗体位置只实现了简单的鼠标跟随 同时保证了和采样区域不重叠

  另外我使用了一个BackgroundWorker来定时刷新更新窗体 主要是为了实现动画内容(GIF Flash等)的显示

  至于移动的时候使用SetWindowPos 主要是为了保证窗体一直位于顶层 否则的话一些置顶的窗口(如QQ)等将覆蓋当前窗口

  已知问题     不支持视频截取    部分ToolTip提示无法显示    可能会造成背景窗口部分显示失效     SKHook类中 对于键盘事件处理 存在不足

cha138/Article/program/net/201311/13719

相关参考

知识大全 C#中使用钩子控制鼠标实现代码

C#中使用钩子控制鼠标实现代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 工作中有这

知识大全 C#中用钩子(hook)实现的屏幕键盘

C#中用钩子(hook)实现的屏幕键盘  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  要实现一个

知识大全 用钩子(hook)实现C#的屏幕键盘效果

用钩子(hook)实现C#的屏幕键盘效果  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  要实现一

知识大全 C#回调函数及API应用浅析

C#回调函数及API应用浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  开发环境:WinXP

棘钩子散

棘钩子散的基本资料,相关中药材1味。棘钩子散的基本资料棘钩子散(《百一》卷十二,名见《朱氏集验方》卷二)处方麝香。制法上以酒濡之,作10许丸。功能主治消渴,酒疸。用法用量以枳枸子作汤吞服。各家论述消渴

知识大全 第一个C#应用程序

展现C#世界之三:第一个C#应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选择一个编辑

知识大全 C#窗体的应用

C#窗体的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在做Winform窗体程序的时候遇

知识大全 C#创建多线程应用程序

C#创建多线程应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在NET和C#中编写一个多

知识大全 C#基础应用--Extension

C#基础应用--Extension  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前几天有同事问

知识大全 C#拖放技术的典型应用

C#拖放技术的典型应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在应用程序中有时用户希望将