知识大全 深入探讨.NET中的钩子技术[4]
Posted 知
篇首语:如果不想在世界上虚度一生,那就要学习一辈子。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 深入探讨.NET中的钩子技术[4]相关的知识,希望对你有一定的参考价值。
深入探讨.NET中的钩子技术[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在这个方法中 我们检查是否有人在听这一个事件 如果没有 不必继续处理这一事件 然后 我们把WPARAM转换成一个MouseEvents枚举类型 我们已小心地构造了MouseEvents枚举来准确匹配它们在C++中相应的常数 这允许我们简单地把指针的值转换成枚举类型 但是要注意 这种转换即使在WPARAM的值不匹配一个枚举值的情况下也会成功 mEvent的值将仅是未定义的(不是null 只是不在枚举值范围之内) 为此 请详细分析System Enum IsDefined方法
接下来 在确定我们收到的事件类型后 该类激活这个事件 并且通知消费者鼠标事件的类型及在该事件过程中鼠标的位置
最后注意 有关转换WPARAM和LPARAM值 对于每个类型的事件 这些变量的值和意思是不同的 因此 在每一种钩子类型中 我们必须区别地解释这些值 我选择用C++实现这种转换 而不是尽量用C#来模仿复杂的C++结构和指针 例如 前面的类就使用了一个叫作GetMousePosition的C++函数 下面是C++ DLL中的这个方法
bool GetMousePosition(WPARAM wparam LPARAM lparam int & x int & y) MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lparam; x = pMouseStruct >pt x; y = pMouseStruct >pt y; return true;
不是尽量映射MOUSEHOOKSTRUCT结构指针到C# 我们简单地暂时把它回传到C++层以提取我们需要的值 注意 因为我们需要从这个调用中返回一些值 我们把我们的整数作为参考变量传递 这直接映射到C#中的int* 但是 我们可以重载这个行为 通过选择正确的签名来导入这个方法
private static extern bool InternalGetMousePosition(UIntPtr wparam
IntPtr lparam ref int x ref int y)
通过把integer参数定义为ref int 我们得到通过C++参照传递给我们的值 如果我们想要的话 我们还可以使用out int
五 限制
一些钩子类型并不适合实现全局钩子 我当前正在考虑解决办法 它将允许使用受限制的钩子类型 到目前为止 不要把这些类型添加回该库中 因为它们将导致应用程序的失败(经常是系统范围的灾难性失败) 下一节将集中讨论这些限制背后的原因和解决办法
HookTypes CallWindowProcedureHookTypes CallWindowProretHookTypes ComputerBasedTrainingHookTypes DebugHookTypes ForegroundIdleHookTypes JournalRecordHookTypes JournalPlaybackHookTypes GetMessageHookTypes SystemMessageFilter
六 两种类型的钩子
在本节中 我将尽量解释为什么一些钩子类型被限制在一定的范畴内而另外一些则不受限制 如果我使用有点偏差术语的话 请原谅我 我还没有找到任何有关这部分题目的文档 因此 我编造了我自己的词汇 另外 如果你认为我根本就不对 请告诉我好了
当Windows调用传递到SetWindowsHookEx()的回调函数时它们会因不同类型的钩子而被区别调用 基本上有两种情况 切换执行上下文的钩子和不切换执行上下文的钩子 用另一种方式说 也就是 在放钩子的应用程序进程空间执行钩子回调函数的情况和在被钩住的应用程序进程空间执行钩子回调函数的情况
钩子类型例如鼠标和键盘钩子都是在被Windows调用之前切换上下文的 整个过程大致如下
应用程序X拥有焦点并执行 用户按下一个键 Windows从应用程序X接管上下文并把执行上下文切换到放钩子的应用程序 Windows用放钩子的应用程序进程空间中的键消息参数调用钩子回调函数 Windows从放钩子的应用程序接管上下文并把执行上下文切换回应用程序X Windows把消息放进应用程序X的消息排队 稍微一会儿之后 当应用程序X执行时 它从自己的消息排队中取出消息并且调用它的内部按键(或松开或按下)处理器
cha138/Article/program/net/201311/15482相关参考
深入探讨.NET中的钩子技术[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一介绍 本文
深入探讨.NET中的钩子技术[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 三使用代码
深入探讨.NET中的钩子技术[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
深入探讨.NET中的钩子技术[5] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
浅谈VB.NET中的跨进程消息钩子 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们都知道在V
ASP.NETWebPage应用深入探讨 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一服务器
深入探讨数据仓库建模与ETL的实践技巧[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 缓慢
深入了解ASP.NET中的“空” 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 空对于许多开发人
探讨.NET中的联合结构 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 导读在进行某些算法的C语
深入分析ADO.NET中的DataSet对象 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! AD