全局键盘钩子

全局键盘钩子这是在系统的范围内截获键盘消息,所以需要全局键盘钩子,全局键盘钩子需要DLL文件的支持,这样系统才能把DLL强行的加载到进程中去。建立一个新的DLL文件,在DllMain()函数所在的CPP中添加:定义两个全局变量:钩子句柄和DLL模块句柄。HHOOKg_Hook=NULL;HINSTANCEg_Instance=NULL;在DllMain函数中保存DLL模块句柄,安装…

大家好,又见面了,我是你们的朋友全栈君。

这是在系统的范围内截获键盘消息,所以需要全局键盘钩子,全局键盘钩子需要DLL文件的支持,这样系统才能把DLL强行的加载到进程中去。建立一个新的DLL文件,在DllMain()函数所在的CPP中添加:

定义两个全局变量:钩子句柄和DLL模块句柄。

HHOOK g_Hook = NULL;
HINSTANCE g_Instance = NULL;

在DllMain函数中保存DLL模块句柄,安装钩子SetWindowsHookEx()参数需要用到。

BOOL APIENTRY DllMain( HMODULE hModule,    DWORD  ul_reason_for_call,LPVOID lpReserved)
{
	
	g_Instance = (HINSTANCE)hModule;  //保存DLL模块句柄

	return TRUE;
}

键盘钩子函数,调用约定为_stdcall:

LRESULT _stdcall KeyboradProc(int code ,WPARAM wParam,LPARAM lParam)
{
	if (code < 0)
	{
		return CallNextHookEx(g_Hook,code,wParam,lParam);
	}
	if (code == HC_ACTION&&lParam>0)
	{
		char Buffer[10] = { 0 };
		GetKeyNameText(lParam,(LPWSTR)Buffer,10);
		MessageBox(NULL,(LPCWSTR)Buffer,NULL,MB_OK);
	}
	return  CallNextHookEx(g_Hook, code, wParam, lParam);
}

如果code的值小于0,则必须调用CallNextHookEx()并返回它的值,不对这个消息进行处理。MSDN是让这么干的。

如果code == HC_ACTION&&lParam>0  则表示消息中含有键盘消息,且按键信息有值,然后读取内容。

安装和卸载钩子函数:

VOID SetHook()
{

	//普通的键盘钩子  最后一个参数为NULL全局钩子
	g_Hook = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboradProc,g_Instance,NULL);
}
VOID UnSetHook()
{
	UnhookWindowsHookEx(g_Hook);
	g_Hook = NULL;
}

最后建一个MFC程序或者黑窗口程序也行,MFC的话加载SetHook()函数和UnSetHook()函数后关联到两个按钮中去,效果是这个样子的:

全局键盘钩子

但是普通的键盘钩子对一些系统按键没有效果,例如截屏键PrtSc,对于系统按键要用到:低级键盘钩子

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132050.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Burp_suite安装及使用教程(专业版)

    Burp_suite安装及使用教程(专业版)1、工具下载地址:https://down.52pojie.cn/Tools/Network_Analyzer/Burp_Suite_Pro_v1.7.37_Loader_Keygen.zip工具运

    2022年6月30日
    25
  • post请求百度网址内容和访问本地springmvc工程controller

    post请求百度网址内容和访问本地springmvc工程controller

    2021年7月19日
    121
  • 什么是多模态学习?

    什么是多模态学习?首先,什么叫做模态(Modality)呢?每一种信息的来源或者形式,都可以称为一种模态。例如,人有触觉,听觉,视觉,嗅觉;信息的媒介,有语音、视频、文字等;多种多样的传感器,如雷达、红外、加速度计等。以上的每一种都可以称为一种模态。同时,模态也可以有非常广泛的定义,比如我们可以把两种不同的语言当做是两种模态,甚至在两种不同情况下采集到的数据集,亦可认为是两种模态。因此,多模态机器学习,…

    2022年6月16日
    32
  • eclipse导入web项目进行部署并运行

    eclipse导入web项目进行部署并运行eclipse导入web项目进行部署并运行eclipse导入web项目操作总结web项目部署eclipse导入web项目导入项目前默认已经配置好web项目开发环境,未配置好请点击这儿左键单击File,选择Import…,或者直接在工作区空白处右击选择Import,再选择Import…选择General文件下的ExistingprojectsintoWorkspace,将项目导入到工作区中选择Browse选择要导入的项目,然后在Options中的copyprojectintoproje

    2025年5月26日
    0
  • 手把手教你学SVN

    手把手教你学SVN注意转载须保留原文链接(http://www.cnblogs.com/wzhiq896/p/6822713.html)作者:wangwen896SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。对于很多新手来…

    2022年5月6日
    40
  • 二叉树经典问题——已知中序和前序重建二叉树

    二叉树经典问题——已知中序和前序重建二叉树运用前序和中序序列重建二叉树及其相关应用重建过程1,在二叉树的学习中经常会遇到一类问题,就是给出一棵二叉树的前序和中序序列(后序和中序类似)然后求树的深度、树的后序序列、树的各种遍历等等问题,这个时候如果能根据相关的序列把其代表的二叉树重建出来,那么所有的问题便会迎刃而解。博文的第一部分就给出相关的重建步骤。2,重建中最关键的一点是从前序中找根然后在后序中用相应的根把树‘分解’。举个例子:

    2022年6月11日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号