在c中应用钩子:纯C#钩子实现及应用

  下载可执行文件(Sht + Esc 退出):http://file.ddvip.com/2008_10/1224819081_ddvip_7241.rar

  下载源文件:http://file.ddvip.com/2008_10/1224819137_ddvip_3997.rar

  纯C#钩子(Hook)实现

  要实现系统钩子其实很简单 3个Win32API即可

  SetWindowsHookEx 用于设置钩子(设立道卡子盘查需要信息)

  Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure,pInstance,0);

  注:ManestModule属性是.Net Framework 2.0中新增加所以当你依然使用.Net Framework 1.x时候可以使用GetModules思路方法获取当前所有模块然后用其中个作为GetHINSTAN思路方法参数来获得合适句柄指针

  钩子应用DEMO-屏幕放大器

  所谓屏幕放大器类似和WINDOWS系统中辅助工具中放大镜

  前两天在找资料时候突然发现在2.0中Graphics类多了个CopyFromScreen思路方法可以直接实现屏幕抓取于是有了做屏幕放大器想法

  首先我定义了是SKHOOK类来截取键盘及鼠标

  由于需要获得全局鼠标消息来确定截屏位置同时要建立个全局快捷键来退出所以只能用上面说钩子来实现

  然后我通过鼠标点来设置采样区域以及窗体位置

  采样区域为鼠标点为中心50*50矩形区域窗体位置只实现了简单鼠标跟随同时保证了和采样区域不重叠

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



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

  已知问题:

  1不支持视频截取

  2部分ToolTip提示无法显示

  3可能会造成背景窗口部分显示失效

  4SKHook类中对于键盘事件处理存在不足

  还有个问题就是当鼠标移动比较快时候窗口边框会有残影不知道是什么原因这个问题在以往Fram窗体中直是困扰我问题至今没有找到解决办法



Tags:  钩子函数 夺钩子 键盘钩子 在c中应用钩子

延伸阅读

最新评论

发表评论