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

    文章

    3694

    浏览量

    93221
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    基于Nordic nRF52840无线键盘鼠标物联网解决方案

    随着物联网技术的快速发展,无线键盘鼠标方案在办公场景中正发挥着越来越重要的作用。该方案基于BLE(低功耗蓝牙)和物联网技术,为用户提供了无线、便捷、高效的输入和控制体验。 方案说明:
    发表于 03-25 17:44

    龙芯中科荣获2024年度信息技术应用创新工作委员会卓越贡献成员单位

    光南,工业和信息化部信息技术发展司系统创新应用处处长孟洪涛,中国电子工业标准化技术协会执行秘书长朵晶,信工委会秘书长赵成志等出席。会上,龙
    的头像 发表于 01-23 10:50 981次阅读

    芯盛智能荣获2024年信息技术应用创新工作委员会卓越贡献成员单位

    日前,中国电子工业标准化技术协会信息技术应用创新工作委员会(以下简称 “信工委会”)2024 年度总结座谈会于北京隆重举行。此次会议对在信工作中作出突出贡献的成员单位予以表彰。江苏
    的头像 发表于 01-20 09:56 929次阅读

    瑞芯微开发板/主板Android系统APK签名文件使用方法,实用干货

    瑞芯微主板/开发板Android系统,APK系统签名文件使用方法
    的头像 发表于 12-26 09:43 1500次阅读
    瑞芯微开发板/主板Android<b class='flag-5'>系统</b>APK签名文件<b class='flag-5'>使用方法</b>,实用干货

    飞腾助力首届教育信息技术应用创新大赛圆满落幕

    近日,由中国教育技术协会主办,教育部教育管理信息中心教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信工委会支持,北京航空航天
    的头像 发表于 12-24 09:57 768次阅读

    有方科技参编的信息技术团体标准发布

    近日,有方科技参编的《信息技术产品供应链成熟度 共性指标 第1部分:企业背景评价》《信息技术产品供应链成熟度 共性指标 第2部分:技术掌控评价》《信息技术产品供应链成熟度 共性指标 第
    的头像 发表于 12-23 10:44 900次阅读

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

    近日,2024首届教育信息技术应用创新大赛在北京航空航天大学成功举办。本次大赛由中国教育技术协会主办,教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信
    的头像 发表于 12-19 17:02 820次阅读