很久之前实现的功能,也是参考其他人的实现,时间太久,具体参考哪里已经记不得了。

这里不仅能屏蔽一般的快捷键,还可以屏蔽ctrl+atl+del。

int globlePid = 0;
HHOOK keyHook = NULL;
HHOOK mouseHook = NULL;//键盘钩子过程
LRESULT CALLBACK keyProc(int nCode, WPARAM wParam, LPARAM lParam)
{//在WH_KEYBOARD_LL模式下lParam 是指向KBDLLHOOKSTRUCT类型地址KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *)lParam;//如果nCode等于HC_ACTION则处理该消息,如果小于0,则钩子子程就必须将该消息传递给 CallNextHookEx//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;}//return 1;//返回1表示截取消息不再传递,返回0表示不作处理,消息继续传递//}return CallNextHookEx(keyHook, nCode, wParam, lParam);
}//鼠标钩子过程
LRESULT CALLBACK mouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{return 1;
}//卸载钩子
void unHook()
{UnhookWindowsHookEx(keyHook);//  UnhookWindowsHookEx(mouseHook);
}//安装钩子,调用该函数即安装钩子
void setHook()
{//这两个底层钩子,不要DLL就可以全局//底层键盘钩子keyHook = SetWindowsHookEx(WH_KEYBOARD_LL, keyProc, GetModuleHandle(NULL), 0);//底层鼠标钩子//    mouseHook =SetWindowsHookEx( WH_MOUSE_LL,mouseProc,GetModuleHandle(NULL),0);
}//提升权限
void EnableDebugPriv()
{HANDLE hToken;LUID sedebugnameValue;TOKEN_PRIVILEGES tkp;if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {return;}if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue)) {CloseHandle(hToken);return;}tkp.PrivilegeCount = 1;tkp.Privileges[0].Luid = sedebugnameValue;tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL)) {CloseHandle(hToken);return;}
}char* ConvertLPWSTRToLPSTR(LPWSTR lpwszStrIn)
{LPSTR pszOut = NULL;if (lpwszStrIn != NULL){int nInputStrLen = wcslen(lpwszStrIn);// Double NULL Termination  int nOutputStrLen = WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;pszOut = new char[nOutputStrLen];if (pszOut){memset(pszOut, 0x00, nOutputStrLen);WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);}}return pszOut;
}//冻结
void Freeze()
{//枚举进程信息
    PROCESSENTRY32 pe32;pe32.dwSize = sizeof(pe32);HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);int processPid;//CString strTmp;BOOL b = ::Process32First(hProcessSnap, &pe32);while (b){processPid = pe32.th32ProcessID;char *exeFile = ConvertLPWSTRToLPSTR(pe32.szExeFile);if (strcmp(exeFile, "winlogon.exe") == 0){break;}delete[] exeFile;b = ::Process32Next(hProcessSnap, &pe32);}::CloseHandle(hProcessSnap);THREADENTRY32 th32;th32.dwSize = sizeof(th32);HANDLE hThreadSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);globlePid = processPid;unsigned long Pid;Pid = processPid;b = ::Thread32First(hThreadSnap, &th32);while (b){if (th32.th32OwnerProcessID == Pid){HANDLE oth = OpenThread(THREAD_ALL_ACCESS, FALSE, th32.th32ThreadID);if (!(::SuspendThread(oth))){qDebug() << "freeze successed";}else{qDebug() << "freeze failed";}CloseHandle(oth);break;}::Thread32Next(hThreadSnap, &th32);}::CloseHandle(hThreadSnap);
}void unFreeze()
{unsigned long Pid;Pid = globlePid;THREADENTRY32 th32;th32.dwSize = sizeof(th32);HANDLE hThreadSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);BOOL b = ::Thread32First(hThreadSnap, &th32);while (b){if (th32.th32OwnerProcessID == Pid){HANDLE oth = OpenThread(THREAD_ALL_ACCESS, FALSE, th32.th32ThreadID);if (::ResumeThread(oth)){qDebug() << "unfreeze successed";}else{qDebug() << "unfreeze failed";}CloseHandle(oth);break;}::Thread32Next(hThreadSnap, &th32);}::CloseHandle(hThreadSnap);
}

调用:

    //屏蔽ctrl+alt+del
  EnableDebugPriv();Freeze();//屏蔽其他快捷键  setHook();

转载于:https://www.cnblogs.com/tiandsp/p/10275683.html

c++屏蔽Win10系统快捷键相关推荐

  1. 修改注册表屏蔽windows系统快捷键的方法

    1.屏蔽鼠标右键 HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer 修改内容: 在 ...

  2. IDEA快捷键以及和win10系统冲突

    在网上找了一些快捷键(当做笔记用忘了看看): Ctrl+Shift + Enter,语句完成 "!",否定完成,输入表达式时按 "!"键 Ctrl+E,最近的文 ...

  3. 关于win10系统开启热点后,本机电脑不能上网的解决方案

    最近发现不少小伙伴包括我自己遇到了这样的问题,电脑连接网络后本身是可以上网的,然后开启热点后,电脑就上不了网.但是接入电脑热点的设备是可以上网的. 尝试重置网络状态无果后,发现是win10的最近一次更 ...

  4. win10常用快捷键总汇

    win+R 运行 win+E 资源管理器 win+S 查看语音助手 win+T 后台程序切换 win+A 打开通知中心 win+L 锁屏 win+P 投影切换 win10系统快捷键有哪些 Win+Ta ...

  5. win10禁用全角,教你恢复win10系统屏蔽全角/半角快捷键的办法

    你是否遇到过关于对win10系统屏蔽全角/半角快捷键设置的方法,在使用win10系统的过程中经常不知道如何去对win10系统屏蔽全角/半角快捷键进行设置,有什么好的办法去设置win10系统屏蔽全角/半 ...

  6. win10电脑去掉快捷箭头_【搞机作战室】Win10系统电脑 常用快捷方式按键 (快捷键)介绍...

    随着win10系统的推广及普及,使用win10系统的越来越多了.在日常操作使用中,只是使用鼠标的话,太繁琐了.为了方便我们经常会使用一些键盘快捷方式来简便流程,这里我们简称为快捷键. 最简单的,例如w ...

  7. Win10系统截图新工具的快捷键

    文章目录 1 Win10系统的截屏工具 2 Win10系统的截屏工具快捷键 3 Win10系统截屏工具的其他特性和不足之处 1 Win10系统的截屏工具 在日常 摸鱼聊天 工作沟通交流中,文字有时不足 ...

  8. win10系统多桌面切换方法及切换快捷键详细介绍

    2019独角兽企业重金招聘Python工程师标准>>> 时间:2016-03-03 来源:互联网 [我要评论] win10系统中用户除了可以切换任务之外,还可以进行多桌面切换,就像是 ...

  9. win10系统excel2019快速实现间隔行填充颜色快捷键的方法

    描述:win10系统excel2019快速实现间隔行填充颜色快捷键的方法 步骤: 原数据,无颜色 选中所有数据,快捷键ctrl+t,点击确定 这就实现了间行填充

最新文章

  1. chart.Correlation绘制相关性热图
  2. 查看网页js数据接口
  3. android text字体居中显示,Android Canvas的drawText()和文字居中方案
  4. 2015年07月04日
  5. html业内响应,html5页面
  6. react学习(35)----getFieldDecorator will override value
  7. eclipse设置jsp文件编码默认为UTF-8
  8. 上海的雨什么时候才可以停...
  9. Java实现二维码生成及图片合成
  10. 华为云服务器安装redis、mysql、jdk、tomcat、nginx
  11. ps提示没有足够的ram
  12. edvac是商用计算机吗,计算机系统发展历程.ppt
  13. FFmpeg学习(音视频理论知识)
  14. android 手机自动控制,Automate自动化处理任务(自动操控手机)
  15. HEVC核心编码技术之一.图像的编码划分
  16. Docker部署RabbitMQ
  17. 【转载】优秀博文转载
  18. 数字疗法 | 精神障碍患者的救命稻草
  19. CSS:3D效果(位移、旋转)
  20. 华硕K40in黑苹果更新USB热插拔支持

热门文章

  1. java学习笔记四:正则表达式
  2. Linux系统管理16:shell
  3. 一张纸对折13次JAVA_一张纸最多折叠8次?她把纸折叠了13次后,发生了什么?
  4. 史上最全的Android面试题集锦,Android岗
  5. brew Error: Cask ‘adoptopenjdk8‘ is unreadable
  6. 如何通过轨迹信息判断驾驶人是否为同一人?
  7. 2022深圳国际医疗器械展览会
  8. vue-企业微信绑定和解绑
  9. 利用AST对抗js混淆(三) 控制流平坦化(Control Flow Flattening)的处理
  10. 目标伪类选择器元素状态伪类