c语言windows关机事件捕获,VC中使用低级钩子捕获系统按键

在VC中捕按键可以在OnKeyDown 或 OnKeyUp 事件中进行捕获,不过这有很大的局限性,这里只能捕获用户按键。但在一些特殊的工程(项目)中往往需要捕获某些系统按键以完成特殊的功能,我们就不得不选择钩子了,一般情况下大家都会选择 WH_KEYBOARD 这个钩子类型,但是在编写过程会发现这个钩子类型并不能捕获所有的系统按键,怎么办呢?那就得选择 WH_KEYBOARD_LL (低级键盘钩子)了,使用它可以捕获全部的系统按键,一个不漏……

在使用低级键盘钩子之前,先在 StdAfx.h 的第一行添加一条: #define _WIN32_WINNT 0x400               (这里假定你是用的 MFC 的 DLL),不然在编译的时候会提示说 WH_KEYBOARD_LL 没有定义。网上还有另一种方法:首先定义 #define WH_KEYBOARD_LL 13      ; 然后 Winuser.h 中定义的 tagKBDLLHOOKSTRUCT 代码拷贝到工程中。

下面代码用以捕获系统按键:

/*

用户模块

return TRUE; --->丢弃该消息

*/

LRESULT CALLBACK Hotkey_Filter(int nCode, WPARAM wParam, LPARAM lParam)

{

KBDLLHOOKSTRUCT *Key_Info = (KBDLLHOOKSTRUCT*)lParam;

if (HC_ACTION == nCode)

{

if (WM_KEYDOWN == wParam || WM_SYSKEYDOWN)  //如果按键为按下状态

{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值