【积跬步·三】QT屏蔽键盘按键

#include "mainwindow.h"
#include <QApplication>
#include <QAction>
#include <QKeyEvent>
#include <Windows.h>
#include <QDebug>
QAction* actionC;
HHOOK keyHook = NULL;
LRESULT CALLBACK keyProc(int nCode,WPARAM wParam,LPARAM lParam );
void setHook()
{
    keyHook =SetWindowsHookEx( WH_KEYBOARD_LL,keyProc,GetModuleHandle(NULL),0);
 
//第一个参数表示低级键盘钩子,第二个参数表示回调函数,后面两个参数为回函数的参数
}
void unHook()
{
    UnhookWindowsHookEx(keyHook);
}
LRESULT CALLBACK keyProc(int nCode,WPARAM wParam,LPARAM lParam )
{
 
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
if(nCode == HC_ACTION){
if(pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL)& 0x8000 && GetAsyncKeyState(VK_SHIFT)&0x8000)
{
qDebug()<<"Ctrl+Shift+Esc";
return 1;
}
else if(pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL) & 0x8000)
{
qDebug() << "Ctrl+Esc";
return 1;
}
else if(pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN)
{
qDebug() << "Alt+Tab";
return 1;
}
else if(pkbhs->vkCode == VK_ESCAPE && pkbhs->flags &LLKHF_ALTDOWN)
{
qDebug() << "Alt+Esc";
return 1;
}
else if(pkbhs->vkCode == VK_LWIN || pkbhs->vkCode == VK_RWIN)
{
qDebug() << "LWIN/RWIN";
return 1;
}
else if(pkbhs->vkCode == VK_F4 && pkbhs->flags & LLKHF_ALTDOWN)
{
qDebug() << "Alt+F4";
return 1;
}
/*else if(pkbhs->vkCode == GetAsyncKeyState(VK_CANCEL)&0x8000 &&  pkbhs->flags & LLKHF_ALTDOWN)
{
qDebug()<< "Ctrl";
}*/
if(pkbhs->vkCode == VK_F12)
{
    unHook();
    //TaskScreen( true );
 
    qApp->quit();
return 1;
}
}
return CallNextHookEx(keyHook, nCode, wParam, lParam);
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    setHook();
    actionC = new QAction(&a);
    //actionC->setShortcut((Qt::Key_Alt + Qt::Key_Tab));
    actionC->setShortcut(Qt::Key_Meta);
    MainWindow w;
    w.addAction(actionC);
    w.show();
 
    return a.exec();
}
 

 

先贴了代码,等有时间再写分析

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值