0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术WinCE系统鼠标键盘钩子使用方法简介

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-05 11:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在实际应用中,有时程序需要在特定的鼠标、按键事件后,执行一些操作,比如:

1、点击触摸屏时触发蜂鸣器。

2、在休眠状态点击触摸屏后,让程序结束休眠状态。

3、设定全局的按键功能,如一键截图或一键关机。

4、过滤一些鼠标或键盘操作等等。

这时,可以使用键盘鼠标钩子来实现这些功能。

钩子是WINDOWS/WINCE系统独有的消息处理机制。通过系统调用,将消息处理程序段挂入系统,获得消息处理优先控制权,在消息达到目的窗口前进行处理。钩子函数可以通过判断决定是否加工处理(改变)消息,或不做处理继续传递各消息,或强制结束消息传递。

钩子有很多种,WINCE系统已精简到只有4种钩子。同时钩子又可做局部钩子或全局钩子,局部钩子仅在指定进程内生效,而全局钩子在系统范围内都生效。一般的全局钩子需要挂载到dll中使用,本文介绍的鼠标钩子和键盘钩子较特殊,不需要挂载到dll中即可全局生效。

钩子的运行逻辑如下图,每种钩子可以挂入任意多个钩子函数,以链表方式存储。系统优先访问链表首位的钩子,然后依次传递消息给后面的钩子处理。后挂入的钩子位于链表的前端。

使用方法

添加钩子分3步。

1、编写钩子函数处理代码

2、调用API函数将钩子函数挂入系统

3、创建消息循环,使钩子运作起来

添加引用

使用钩子需要用到函数,SetWindowsHookEx,UnhookWindowsHookEx,CallNextHookEx。及键盘钩子鼠标钩子的定义,及键盘消息,鼠标消息的结构体定义,均定义在pwinuser.h中。

#include "pwinuser.h"

创建需要挂入系统的消息处理函数

即钩子函数,钩子函数定义必须为制定的格式。

钩子函数根据实际应用需求,决定是否调用CallNextHookEx,将消息传递给后面的钩子处理。

首位的钩子函数返回值决定该消息是丢弃,还是传给系统消息处理函数,再分发给各窗口。

以下为键盘及鼠标钩子函数的示例。

键盘钩子函数

该键盘钩子示例函数中,当检测到按键‘1’按下时,调用Beep函数触发蜂鸣器。

LRESULT CALLBACK KeyboardProc(intnCode,WPARAM wParam,LPARAM lParam)

{

KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;

if(wParam == WM_KEYDOWN) //按钮按下

{

switch(pkbhs->vkCode)

{

case0x31: //按钮‘’

Beep();

break;

defaut:

break;

}

}

returnCallNextHookEx(NULL,nCode,wParam,lParam);

}

注:

1、WINCE键盘钩子函数得到的WPARAM记录的消息类别,如按键是按下消息WM_KEYDOWN还是弹起消息WM_KEYUP。

LPARAM指向键盘消息结构体KBDLLHOOKSTRUCT,里面记录有详细信息,如触发的按键是什么,有没有辅助按下ALT键或者CTRL键,等等。

2、钩子队列第一个钩子的返回值决定系统是否能接受到该消息。

返回0表示,将消息传递给系统消息处理函数继续处理。

返回1表示,丢弃消息,系统将收不到该消息。

调用CallNextHookEx表示调用下一个钩子消息处理函数,如果不调用,那么后面的钩子函数将不产生作用。

鼠标(触摸屏)钩子函数

该鼠标钩子示例函数中,当检测到鼠标或触摸屏点击时,调用Beep函数触发蜂鸣器。

LRESULT CALLBACK MouseHookProc(intnCode, WPARAM wParam, LPARAM lParam)

{

MSLLHOOKSTRUCT *pmshs = (MSLLHOOKSTRUCT *) lParam;

if(wParam == WM_LBUTTONDOWN) //鼠标点击处理代码

{

Beep();

}

returnCallNextHookEx(NULL,nCode,wParam,lParam);

}

注:

1、WINCE鼠标钩子函数得到的WPARAM记录的消息类别,如是鼠标按下还是弹起,还是双击,移动,等等。

LPARAM记录的详细信息,如点击坐标,滚轮参数等等。

2、触摸屏消息和鼠标消息是一样的。

3、钩子队列第一个钩子的返回值决定系统是否能接受到该消息。

返回0表示,将消息传递给系统消息处理函数继续处理。

返回1表示,丢弃消息,系统将收不到该消息。

调用CallNextHookEx表示调用下一个钩子消息处理函数,如果不调用,那么后面的钩子函数将不产生作用。

Beep函数

在本文示例中,将嵌入式板子GPIO15连接上一个蜂鸣器,通过设置GPIO电平触发蜂鸣器。

在程序初始段打开GPIO,获得GPIO句柄。

#include"isa_dio.h"

HANDLE hGpio;

hGpio = OpenGPIO( _T("PIO1:"));

添加Beep函数,通过GPIO句柄操作GPIO15。

voidBeep()

{

GPIO_OutClear(hGpio, GPIO15);

Sleep(10);

GPIO_OutSet(hGpio, GPIO15);

}

添加钩子

在主线程中调用SetWindowsHookEx函数向系统添加钩子。

第一个参数为添加的钩子类型,WH_KEYBOARD_LL为键盘钩子,WH_MOUSE_LL为鼠标钩子。

第二个参数为注入的消息处理函数指针,即前面定义的钩子函数。

第三个参数为钩子程序的instance指针,本文介绍的钩子并不需要挂载到dll中使用,所以简单设置为NULL即可。

最后个参数为钩子关联的线程句柄,这里为0表示关联所有线程,即全局钩子。

函数返回NULL表示添加钩子失败,成功返回钩子句柄。

示例代码如下:

HINSTANCE hInstance = NULL;

HHOOK g_hKBDhook = NULL;

HHOOK g_hMouseHook = NULL;

g_hKBDhook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, hInstance, 0);

if(g_hKBDhook == NULL)

{

returnfalse;

}

g_hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, hInstance, 0);

if(g_hMouseHook == NULL)

{

returnfalse;

}

添加消息循环

钩子机制是基于消息循环的,所以添加消息循环是必须的,如果没有添加消息循环,会导致系统消息进入钩子后卡死。

MFC框架的程序已经自带消息循环。

而命令行的程序则需要在主函数里添加以下代码。

MSG msg;

while(GetMessage(&msg, NULL, 0, 0)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

}

删除钩子

当不需要钩子时,应当主动释放钩子。

UnhookWindowsHookEx(g_ hKBDhook);

UnhookWindowsHookEx(g_hMouseHook);

英创提供了例程及源代码,有需要的客户可以联系英创工程师获得。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    4

    文章

    3711

    浏览量

    94450
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

    37206
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    龙芯中科携手五所高校加速构建自主信息技术人才体系

    为推动国产自主可控处理器深度融入高校人才培养全链条,加速构建自主信息技术人才体系,龙芯校园行活动相继走进中国科学技术大学、安庆师范大学、湖南大学、广西大学、大连理工大学5所高校,聚焦龙芯自主信息技术
    的头像 发表于 04-13 14:32 504次阅读

    全面适配国产操作系统的龙芯平台工控机,构建信产业坚实硬件底座

    产业,即信息技术应用创新产业,是当前国家信息化发展的战略重点。其核心目标是构建自主可控的信息技术体系,从芯片、操作系统到整机、应用软件,
    的头像 发表于 04-08 17:14 593次阅读
    全面适配国产操作<b class='flag-5'>系统</b>的龙芯平台工控机,构建信<b class='flag-5'>创</b>产业坚实硬件底座

    龙芯中科成功举办2025信息技术应用创新产教融合交流会

    11月30日,在教育部教育管理信息中心、山东省电化教育馆的支持和指导下,龙芯中科联合浪潮集团、济南幼儿师范高等专科学校(以下简称“济南幼高专”),成功举办信息技术应用创新产教融合交流会,并同步举行信息技术应用创新实践基地启用仪式
    的头像 发表于 12-08 14:53 1044次阅读

    龙芯中科助力2025教育信息技术应用创新大赛成功举办

    2025年11月13日-15日,由中国教育技术协会主办、浙江大学与中国教育技术协会网络安全专业委员会联合承办,中国电子工业标准化技术协会信息技术应用创新工作委员会、浙江高校信
    的头像 发表于 11-21 16:23 986次阅读

    诚迈科技信电脑助力2025第二届教育信息技术应用创新大赛圆满收官

    11月15日,由中国教育技术协会主办、浙江大学与中国教育技术协会网络安全专业委员会联合承办,中国电子工业标准化技术协会信息技术应用创新工作委员会、浙江高校信
    的头像 发表于 11-17 17:58 893次阅读
    诚迈科技信<b class='flag-5'>创</b>电脑助力2025第二届教育<b class='flag-5'>信息技术</b>应用创新大赛圆满收官

    宝马南京信息技术有限公司开业

    今日,宝马(南京)信息技术有限公司在南京正式“挂牌运行”。这家华晨宝马全资子公司由领悦数字信息技术有限公司南京分公司“迭代”而来,代表着一次里程碑式的“进化”。这次升级不仅加速了宝马在华数字化转型进程,更通过深化本土创新,为“未来智慧出行”的发展谱写了核心“代码”。
    的头像 发表于 10-29 15:17 867次阅读

    软通动力入选2025新一代信息技术应用优秀案例

    近日,DBC德本咨询正式发布“2025新一代信息技术应用优秀案例”榜单,软通动力信息技术(集团)股份有限公司携手广西星网智云科技有限公司,为广西玉柴机器集团有限公司打造的“玉柴数智化审计业务场景项目”成功入选,位列榜单第二名,充分彰显了软通动力在企业数智化转型领域的深厚
    的头像 发表于 09-28 17:48 1617次阅读

    易华录入选国家级信息技术应用创新典型解决方案

    近日,工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)公布了“2024年信息技术应用创新解决方案”评选结果。易华录申报的“基于节能高效蓝光的超级智能存储解决方案”凭借显著的
    的头像 发表于 08-07 15:35 1873次阅读

    信息技术应用产学协同人才培养行动计划”正式发布,诚迈科技入选首批参与单位

    设在中国软件评测中心。诚迈科技作为信技术先锋企业,受邀成为首批参与单位,与国内顶尖高校、领军企业和权威机构携手,共同打造具有中国特色的信息技术人才培养新范式,为
    的头像 发表于 08-06 17:29 1795次阅读
    “<b class='flag-5'>信息技术</b>应用产学协同人才培养行动计划”正式发布,诚迈科技入选首批参与单位

    佛瑞亚如何通过信息技术推动业务增长

    在数字化、信息化的浪潮下,信息技术已经不仅是后台工具,更成为驱动企业发展的关键力量。本期Women Inspiring Mobility,我们采访了佛瑞亚中国区信息技术总监马瑛,了解她和团队如何将
    的头像 发表于 07-29 14:00 1104次阅读

    飞腾主板为信产业发展提高硬实力

    信息技术飞速发展的当下,信产业已成为我国实现科技自立自强、保障国家信息安全的关键领域。信,即信息技术应用创新,其核心目标是实现
    的头像 发表于 07-22 18:20 884次阅读

    DEKRA德凯成为沙特通信和信息技术设备技术法规认证机构

    近日,DEKRA德凯成功获得沙特标准、计量和质量组织(SASO)认可,正式成为沙特通信和信息技术设备技术法规(Technical Regulation for Communications
    的头像 发表于 07-15 14:27 1124次阅读

    京能信息莅临中软国际数字电力科中心调研

    近日,北京京能信息技术有限公司(以下简称“京能信息”)党总支书记、董事长胡耀宇,党总支副书记、总经理梁锦华一行赴能源谷数字电力科中心调研交流,与中软国际开展战略合作洽谈。中软国际执行总裁曹雁率
    的头像 发表于 06-26 17:46 1890次阅读

    中星微技术斩获2025金牛科企业奖

    6月14日,由中国证券报主办的2025科金牛奖颁奖典礼在上海市举行,2025科金牛奖获奖名单现场揭晓。其中中星微技术获得新一代信息技术金牛科
    的头像 发表于 06-16 14:16 1342次阅读

    科普|信是什么?一文读懂“信息技术应用创新”战略

    什么是信?信,即“信息技术应用创新”,是国家推动IT系统自主可控、安全可控的重要战略工程。它不仅是技术层面的创新,更承载着保障国家网络安
    的头像 发表于 06-13 10:06 9891次阅读
    科普|信<b class='flag-5'>创</b>是什么?一文读懂“<b class='flag-5'>信息技术</b>应用创新”战略