CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  硬件/系统

钩子函数的使用范围(学习摘录)

楼主grit(东东)2004-12-03 23:50:35 在 VC/MFC / 硬件/系统 提问

信息来源:msdn  
  grit翻译  
   
  钩子函数的使用范围  
  钩子(hook)从使用范围上分,可分为:线程范围的钩子和系统范围的钩子,有的两者皆顾。  
   
  钩子类型   使用范围    
  WH_CALLWNDPROC   Thread   or   System    
  WH_CBT   Thread   or   System    
  WH_DEBUG   Thread   or   System    
  WH_GETMESSAGE   Thread   or   System    
  WH_JOURNALRECORD   System   Only    
  WH_JOURNALPLAYBACK   System   Only    
  WH_FOREGROUNDIDLE   Thread   or   System    
  WH_SHELL   Thread   or   System    
  WH_KEYBOARD   Thread   or   System    
  WH_MOUSE   Thread   or   System    
  WH_MSGFILTER   Thread   or   System    
  WH_SYSMSGFILTER   System   Only    
   
   
  对于给定的一种钩子类型(hook   type),线程钩子首先被调用,然后调用系统钩子;  
  相对于系统钩子,使用线程钩子有以下几点好处:  
  1、在整个系统范围内,对于对钩子调用不感兴趣的其他程序,线程钩子不会引起不必要的开销;  
  2、不会序列化所有的事件,即让所有的事件串行执行。举个例子,如果一个程序安装了系统范围的响应键盘消息的钩子,传给所有程序的所有键盘消息都将串行通过这个程序的钩子函数,这对系统固有的多通道并行输入队列机制明显是一个浪费。如果钩子函数停止处理键盘事件,那么系统看上去就像停止工作(死机),但实际上它还在运行,只是不响应用户的操作了。如果是这种情况,用户通常会使用ctrl+alt+delete组合注销用户来解决这个问题(虽然用户可能并不了以这样做)。而更有可能有的用户就意识不到使用这种办法。  
  3、不需要将钩子函数的实现封装在一个独立的dll中。而所有系统范围的钩子和希望监控其他应用程序线程的钩子要求必须驻留在dll中。  
  4、不需要在一个dll中和其他的不同的进程共享数据。而一个系统范围的钩子由于必须驻留在dll中,所以如果要和其他进程共享数据也只能在dll中进行。但是这种在dll中和其他进程共享数据的方法并不是dll本身具有的功能,所以你在实现系统范围的钩子函数时必须小心处理共享问题。如果一个钩子函数没有设计好,共用了无效的数据,那么进程可能崩溃。 问题点数:0、回复次数:0Top

相关问题

  • 钩子函数????
  • 钩子函数
  • 有关钩子函数
  • 钩子函数小问题
  • 什么是钩子函数
  • 钩子函数问题???????????
  • 回调函数&钩子函数
  • 关于钩子函数(SetWindowsHookEx)的问题。
  • 钩子函数与文件加密
  • 如何使用钩子函数?

关键词

  • 函数
  • 线程
  • dll
  • 系统
  • 键盘
  • 用户
  • 数据
  • 钩子
  • 范围
  • 使用

得分解答快速导航

  • 帖主:grit

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo