
1个回答
展开全部
以下内容我在你的另外一个类似问题中已经回答, 这里将其再重复一遍, 同时作一些补充!
以下全部手打, 自认为写的很认真,很详细, 呵呵, 如果还有不明白随时欢迎
提出来!
首先说一句, 能够调用WIN32API的编程语言很多, 例如汇编, Fortran, VB, C, Java, 甚至脚本语言matlab, ruby等, 不过原理都是一样的, 这里就以C / C++ 来为例吧
-------------------
SetWindowsHookEx一般都是写在你要使用Hook的地方, 在进一步解释之前先简略说明一下Hook相关情况
-------------------
钩子有局部和远程两种类型, 与钩子相关的函数有:
1. 建立钩子:SetWindowsHookEx, 其四个参数分别为钩子类型, 钩子函数地址, 钩子函数所在DLL的实例句柄,安装钩子后想监控的线程的ID号, 返回参数为钩子句柄
2. UnhookWindowsHookEx, 参数只有一个,为要卸载的钩子句柄
3. 钩子函数(名称任意), 三个参数, 具体意义与钩子类型有关
这里以一个例子说明一下:比如你想写一个程序, 当鼠标移到哪里时就在主程序中显示鼠标所在窗口的名称
--------------------
(1)如果鼠标只是局限在窗口内, 那么以上1, 2, 3三个函数均写在运行的主程序中, 比如函数1可以写在按下某个按钮的消息响应函数中,函数 2 写在松开按扭的消息响应函数中,函数 3 只要不写在别的函数中就行, 因为它本生就是一个要定义的独立函数
(2)如果鼠标可以在屏幕任意位置移动, 那么以上函数1, 2位置同(1), 但函数3要写在一个另外写的DLL里, 因为此时安装的是全局钩子, 为了达到获取窗口名称的目的, 在DLL里可能还要做一些其他工作,比如设置共享段, 关于这些这里不细说了
------------------------
关于钩子,以上只是简单说了一下, 不过, 使用钩子确实也很简单, 因为主要的工作还是在钩子函数里
------------------------
------------------------
------------------------
关于钩子的使用其实真的很简单, 应该说 WIN32编程 其实真的很简单, 更进一步说, 不用动脑筋写算法只用熟练语法的编程 都很简单, 这里当然也包括钩子的应用啦 :)
说到这里忍不住发表一点题外话, 编程多年, 走过很多弯路, 体会很多, 关于编程, 其实学问很大, 小到学语法, 大到算法, 应用, 架构等等, 作为一门计算机科学, 与物理, 数学等有关系的分枝还有很多, 还有与电子相关的专业等, 内容庞杂
因此, 如果你真想学点东西, 不要局限在写一个有特殊用途的桌面程序,也不要整天沉浸在各种语言,语法中, 最主要的是不要贪多! 明确自己学编程到底想做什么, 是写软件, 开发游戏, 还是搞网络, 还是做算法, 还是解决理工,数学, 电子问题
打好基础,明确目标, 就好好钻研吧, 不要什么都学, 但什么都不精
扯远了, 说不定你本生就已经很厉害了, 我反倒显得有些班门弄斧了, 不过都是真实体会, 不管对你有没有用, 再一次 Good luck!
附: ilovelyi@126.com
以下全部手打, 自认为写的很认真,很详细, 呵呵, 如果还有不明白随时欢迎
提出来!
首先说一句, 能够调用WIN32API的编程语言很多, 例如汇编, Fortran, VB, C, Java, 甚至脚本语言matlab, ruby等, 不过原理都是一样的, 这里就以C / C++ 来为例吧
-------------------
SetWindowsHookEx一般都是写在你要使用Hook的地方, 在进一步解释之前先简略说明一下Hook相关情况
-------------------
钩子有局部和远程两种类型, 与钩子相关的函数有:
1. 建立钩子:SetWindowsHookEx, 其四个参数分别为钩子类型, 钩子函数地址, 钩子函数所在DLL的实例句柄,安装钩子后想监控的线程的ID号, 返回参数为钩子句柄
2. UnhookWindowsHookEx, 参数只有一个,为要卸载的钩子句柄
3. 钩子函数(名称任意), 三个参数, 具体意义与钩子类型有关
这里以一个例子说明一下:比如你想写一个程序, 当鼠标移到哪里时就在主程序中显示鼠标所在窗口的名称
--------------------
(1)如果鼠标只是局限在窗口内, 那么以上1, 2, 3三个函数均写在运行的主程序中, 比如函数1可以写在按下某个按钮的消息响应函数中,函数 2 写在松开按扭的消息响应函数中,函数 3 只要不写在别的函数中就行, 因为它本生就是一个要定义的独立函数
(2)如果鼠标可以在屏幕任意位置移动, 那么以上函数1, 2位置同(1), 但函数3要写在一个另外写的DLL里, 因为此时安装的是全局钩子, 为了达到获取窗口名称的目的, 在DLL里可能还要做一些其他工作,比如设置共享段, 关于这些这里不细说了
------------------------
关于钩子,以上只是简单说了一下, 不过, 使用钩子确实也很简单, 因为主要的工作还是在钩子函数里
------------------------
------------------------
------------------------
关于钩子的使用其实真的很简单, 应该说 WIN32编程 其实真的很简单, 更进一步说, 不用动脑筋写算法只用熟练语法的编程 都很简单, 这里当然也包括钩子的应用啦 :)
说到这里忍不住发表一点题外话, 编程多年, 走过很多弯路, 体会很多, 关于编程, 其实学问很大, 小到学语法, 大到算法, 应用, 架构等等, 作为一门计算机科学, 与物理, 数学等有关系的分枝还有很多, 还有与电子相关的专业等, 内容庞杂
因此, 如果你真想学点东西, 不要局限在写一个有特殊用途的桌面程序,也不要整天沉浸在各种语言,语法中, 最主要的是不要贪多! 明确自己学编程到底想做什么, 是写软件, 开发游戏, 还是搞网络, 还是做算法, 还是解决理工,数学, 电子问题
打好基础,明确目标, 就好好钻研吧, 不要什么都学, 但什么都不精
扯远了, 说不定你本生就已经很厉害了, 我反倒显得有些班门弄斧了, 不过都是真实体会, 不管对你有没有用, 再一次 Good luck!
附: ilovelyi@126.com

2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询