钩子编程(HOOK) 安装进程内键盘钩子

作者 : 卿笃军

系统钩子:钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。

下面演示如何安装进程内键盘钩子:

第一步:打开VC6.0,创建一个基于对话框的MFC应用程序。

第二步:在BOOL CHookDlg::OnInitDialog()函数上面编写如下代码:(注意是在上面编写,不是在OnInitDialog()里面)

HHOOK g_hKeyboard = NULL;

LRESULT CALLBACK KeyboardProc(int ncode, WPARAM wParam, LPARAM lParam)
{
	return 1;
}

第三步:在OnInitDialog()函数里面安装键盘钩子,复制粘贴如下代码:

g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());

第四步:编译->链接->运行:这时候你发现键盘事件已经不能响应了~~~

当然,如果你只想屏蔽掉空格键,你可以这样写:

LRESULT CALLBACK KeyboardProc(int ncode, WPARAM wParam, LPARAM lParam)
{
	if (VK_SPACE == wParam)
		return 1;
	else
		return CallNextHookEx(g_hKeyboard, ncode, wParam, lParam);
}

如果按下的是空格键,直接返回,告诉系统,该消息已执行。否则将消息传给下一个钩子~~~

还有一种就是,需要屏蔽一些组合键,比如:Alt+F4,可以用如下方式实现:

LRESULT CALLBACK KeyboardProc(int ncode, WPARAM wParam, LPARAM lParam)
{
	if (VK_F4 == wParam || (1 == (lParam>>29 & 1)))
		return 1;
	else
		return CallNextHookEx(g_hKeyboard, ncode, wParam, lParam);
}

lParam参数各位的含义:

0-15位:指定当前消息的重复次数。其值就是用户按下该键后自动重复的次数,但是重复次数不累积。

16-23位:指定其扫描码,其值依赖于OEM厂商。

24位:指定该按键是否为扩展按键,所谓扩展按键就是Ctrl,Alt之类的,如果是扩展按键,其值为1,否则为0。

25-28位:保留字段,暂时不可用。

29位:指定按键时的上下文,其值为1时表示在按键时Alt键被按下,其值为0表示WM_SYSKEYDOWN消息因没有任何窗口有键盘焦点而被发送到当前活动窗口。

30位:指定该按键之前的状态,其值为1时表示该消息发送前,该按键是被按下的,其值为0表示该消息发送前该按键是抬起的。

31位:指定其转换状态,对WM_SYSKEYDOWN消息而言,其值总为0。

参考文献:模拟键盘鼠标按键,http://m.blog.csdn.net/blog/Plutus_Lee/16993445

钩子编程(HOOK) 安装进程内键盘钩子

时间: 2024-11-10 07:41:36

钩子编程(HOOK) 安装进程内键盘钩子的相关文章

钩子编程(HOOK) 安装进程内键盘钩子 (1)

摘要:钩子能够监视系统或进程中的各种事件消息.截获发往目标窗体的消息并进行处理.这样,我们就能够在系统中安装自己定义的钩子,监视系统中特定事件的发生.完毕特定的功能,比方截获键盘.鼠标的输入.屏幕取词,日志监视等等. 以下演示怎样安装进程内键盘钩子, Step 1:打开VC6.0.创建一个基于对话框的MFC应用程序. Step 2:在BOOL CHookDlg::OnInitDialog()函数上面编写例如以下代码:(注意是在上面编写.不是在OnInitDialog()里面) HHOOK g_h

钩子编程(HOOK) 安装进程内鼠标钩子

作者 : 卿笃军 钩子函数: WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一.利用它们,您可以捕捉您自己进程或其它进程发生的事件.通过"钩挂",您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做"钩子函数",当每次发生您感兴趣的事件时,WINDOWS都将调用该函数. 下面介绍如何安装一个进程内的鼠标钩子. 第一步:打开VC6.0,新建一个基于对话框的MFC应用程序. 第二步:将如下代码拷贝到BOOL CInnerHookDlg::OnI

基于C#实现的HOOK键盘钩子实例代码

本文所述为基于C#实现的HOOK实例,该实例可用来屏蔽系统热键.程序主要实现了安装钩子.传递钩子.卸载钩子等功能.在传递钩子中:<param name="pHookHandle">是您自己的钩子函数的句柄.用该句柄可以遍历钩子链</param><param name="nCode">把传入的参数简单传给CallNextHookEx即可</param><param name="wParam"&g

一个简单的键盘钩子程序

实现适时监视键盘,并将按键信息保存在TXT文件中的程序       Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能.钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取.启动和关闭应用程序的消息等.本文在VC6编程环境下实现了一个简单的键盘钩子程序,并对Win32全局钩子的运行机制.Win

在WPF中快速实现键盘钩子

大部分的时候,当我们需要键盘事件的时候,可以通过在主窗口注册KeyBinding来实现,不过,有的时候我们需要的是全局键盘事件,想在任何一个地方都能使用,最开始的时候我是通过键盘钩子来实现的, 不过键盘钩子这种DLL调用的方式怎么都看着不大爽,这里介绍一种通过EventManager快速实现键盘事件感知的例子. public class KeyboardEvents { public static event Action<KeyEventArgs> OnKeyDown; static Key

钩子编程(HOOK) 安装系统全局钩子

MySQL使用的是插件式存储引擎. 主要包括存储引擎有:MyISAM,Innodb,NDB Cluster,Maria,Falcon,Memory,Archive,Merge,Federated. 其中最为广泛的是MyISAM 和Innodb两种存储引擎,所以接下来对它们做简单介绍. MyISAM 存储引擎简介 MyISAM 存储引擎的表存储在数据库中,每一个表都被存放为三个以表名命名的物理文件. 1.(.frm文件)任何存储引擎都不可缺少的存放表结构定义信息的文件 2.(.MYD文件)存放表数

钩子编程(HOOK) 屏蔽全部按键、鼠标及系统功能键 (4)

摘要:上篇文章<钩子编程(HOOK) 安装系统全局钩子>已经具体的解说了全局钩子的安装.本文将增强一下钩子的功能.实现屏蔽全部按键鼠标与系统功能键.要实现这个功能.须要安装两个全局钩子,"鼠标钩子" 与 "低级键盘钩子".鼠标钩子--实现屏蔽全部鼠标点击操作.低级键盘钩子--实现屏蔽全部键盘操作,包括屏蔽功能键(ALT+F4.WIN.ALT+TAB.ALT+ESC,CTRL+ESC....).注意:不包括CTRL+ALT+DEL功能键. 本文不会具体介绍

钩子编程(HOOK) 屏蔽所有按键鼠标及系统功能键

作者 : 卿笃军 上篇文章已经详细的讲解了全局钩子的安装,下面我们增强一下钩子的功能,实现屏蔽所有按键鼠标与系统功能键. 要实现这个功能,我们需要安装两个全局钩子,"鼠标钩子" 与 "低级键盘钩子". 鼠标钩子:实现屏蔽所有鼠标点击操作. 低级键盘钩子:实现屏蔽所有键盘操作,包括屏蔽功能键(Alt+F4,Win,Alt+Tab, Alt+Esc,Ctrl+Esc....)注意:不包括Ctrl+Alt+Del功能键. 下面开始安装全局钩子. 第一步:打开VC6.0新建

钩子编程(HOOK) 留后门与钩子卸载

作者 : 卿笃军 问题由来:一般编写钩子程序,我们希望程序一方面能屏蔽键盘鼠标消息,但又希望程序能留有一个"后门",例如,按下F2退出程序. 下面示例,钩子后门设计与钩子卸载: 第一步:打开VC6.0创建一个基于对话框的MFC应用程序. 第二步:在BOOL CHookDlg::OnInitDialog()函数上面编写如下代码,注意不是OnInitDialog()里面: HWND g_hWnd = NULL; //窗口句柄 HHOOK g_hKeyboard = NULL; //钩子句柄