博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++ chap12 hook 和 数据库访问
阅读量:6481 次
发布时间:2019-06-23

本文共 892 字,大约阅读时间需要 2 分钟。

Lesson 20  hook 和 数据库访问

20.1 HOOK 编程

20.1.1 基本知识

1,将特殊消息屏蔽,安装一个HOOK过程,称为钩子过程。

2,操作系统在传递消息时,将我们感兴趣的消息先传递给hook过程,在此函数中进行检查,然后决定是否放行该消息。

3,安装钩子过程

Setwindowshookex

20.1.2进程内钩子

1,安装鼠标钩子

_1, 定义相应的鼠标钩子过程

LRESULT CALLBACK MouseProc(

  int nCode,      // hook code

  WPARAM wParam,  // message identifier

  LPARAM lParam   // mouse coordinates

)

{

return 1;

}

_2,在 OnInitDialog函数中调用

SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());

2,安装键盘钩子

LRESULT CALLBACK KeyboardProc(

  int code,       // hook code

  WPARAM wParam,  // virtual-key code

  LPARAM lParam   // keystroke-message information

)

{ return 1;}

3,对于键盘,可以只屏蔽某些键,如 VK_SPACE, VK_RETURN

4,也可以对特定的键操作,只按某个键退出程序。

_1,因为钩子函数是全局函数,所以发送消息调用全局的sendmessage函数

::sendmessage(g_hWnd,WM_CLOSE,0,0);

因为我们需要目标窗口的句柄,所以定义全部变量 g_hWnd

OnInitDialog函数中,将其初始化为m_hWnd.

5, 发送关闭消息后,将已安装的钩子过程移除

UnhookWindowsHookEx(g_hKeyboard);

转载于:https://www.cnblogs.com/aprilapril/p/3184377.html

你可能感兴趣的文章
ReadWriteLock与ReentrantReadWriteLock
查看>>
Atitit.软件命名空间 包的命名统计 及命名表(2000个名称) 方案java package...
查看>>
新手指导:教你如何查看识别hadoop是32位还是64位
查看>>
Codeforces Round #180 (Div. 2) D. Fish Weight 贪心
查看>>
Gradle sourceCompatibility has no effect to subprojects(转)
查看>>
百度指数分析
查看>>
使用Mkdocs构建你的项目文档
查看>>
三分钟读懂TT猫分布式、微服务和集群之路
查看>>
fn project 运行时配置选项
查看>>
你的leader还在考核你的千行代码Bug率吗?
查看>>
多块盘制作成一个lvm
查看>>
InnoDB多版本
查看>>
贪心算法 - 活动选择问题
查看>>
独立思考与输入、吸收
查看>>
es6 includes(), startsWith(), endsWith()
查看>>
关于azkaban上传job压缩包报错问题的解决方案
查看>>
JS版日期格式化和解析工具类,毫秒级
查看>>
百度人脸对比
查看>>
Linux内存管理 一个进程究竟占用多少空间?-VSS/RSS/PSS/USS
查看>>
苹果AppStore如何申请加急审核
查看>>