1、屏蔽键盘鼠标,利用HOOK封锁键盘和鼠标。

//键盘HOOK回调
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {if (nCode == HC_ACTION && wParam == WM_KEYDOWN){LPKBDLLHOOKSTRUCT pKbs = (LPKBDLLHOOKSTRUCT)lParam;if (pKbs->vkCode == VK_RETURN){g_widgetApp->quitApp();}}if (nCode >= 0)return 1;elsereturn CallNextHookEx(g_KeyboardHook, nCode, wParam, lParam);
}//鼠标HOOK回调
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) {if (nCode == 0) return 1;return CallNextHookEx(g_MouseHook, nCode, wParam, lParam);
}//设置HOOK
void QtWidgetsApplication1::installHook()
{//安装键盘钩子g_KeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);qDebug() << "SetHook keyboard" << (g_KeyboardHook != NULL);//安装鼠标钩子g_MouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0);qDebug() << "SetHook mouse" << (g_MouseHook != NULL);
}//取消设置HOOK
void QtWidgetsApplication1::uninstallHook()
{if (g_KeyboardHook)qDebug() << "Unhook keyboard:" << (bool)UnhookWindowsHookEx(g_KeyboardHook);if(g_MouseHook)qDebug() << "Unhook mouse:" << (bool)UnhookWindowsHookEx(g_MouseHook);
}

2、上面的HOOK却屏蔽不了Ctrl+Alt+Del,可以挂起winlogon.exe进程,强制它不处理Ctrl+Alt+Del事件

//挂起winlogon.exe进程 即可使Ctrl+Alt+Del失效
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);char *exeFile = 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);g_processId = 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";QMessageBox::information(nullptr, "提示", "freeze failed");}CloseHandle(oth);break;}::Thread32Next(hThreadSnap, &th32);}::CloseHandle(hThreadSnap);
}//恢复winlogon.exe进程
void unFreeze()
{unsigned long Pid;Pid = g_processId;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{QMessageBox::information(nullptr, "提示", "unfreeze failed");qDebug() << "unfreeze failed";}CloseHandle(oth);break;}::Thread32Next(hThreadSnap, &th32);}::CloseHandle(hThreadSnap);
}

3、第2步需要提升调试权限和管理员权限

//提升Debug权限
void EnableDebugPriv()
{HANDLE hToken;LUID luid;TOKEN_PRIVILEGES tkp;OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);tkp.PrivilegeCount = 1;tkp.Privileges[0].Luid = luid;tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges(hToken, false, &tkp, sizeof(tkp), NULL, NULL);CloseHandle(hToken);
}//判断当前是否是以管理员权限运行的
bool IsProcessRunAsAdmin()
{SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;PSID AdministratorsGroup;BOOL b = AllocateAndInitializeSid(&NtAuthority,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,0, 0, 0, 0, 0, 0,&AdministratorsGroup);if (b){CheckTokenMembership(NULL, AdministratorsGroup, &b);FreeSid(AdministratorsGroup);}return b == TRUE;
}//以Admin权限运行程序
short GetAdmin()
{if (IsProcessRunAsAdmin())return 0;CHAR Path[MAX_PATH];ZeroMemory(Path, MAX_PATH);::GetModuleFileNameA(NULL, Path, MAX_PATH);           //获取程序路径HINSTANCE res;res = ShellExecuteA(NULL, "runas", Path, NULL, NULL, SW_SHOW);if ((int)res > 32)return 1;elsereturn 0;
}int main(int argc, char *argv[])
{//以管理员身份启动的进程继续运行,当前进程退出if (GetAdmin() == 1)return 0;QApplication a(argc, argv);QtWidgetsApplication1 w;w.show();return a.exec();
}

4、窗口设置全屏

//全屏置顶显示
setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
this->showFullScreen();

5、启动的时候如果任务管理器在,关掉任务管理器,防止上面的设置失效

//关闭任务管理器
void closeTaskMngr()
{DWORD dwProcessID = FindProcessId("Taskmgr.exe");if (dwProcessID != 0){HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);::TerminateProcess(hProcess, 0);CloseHandle(hProcess);}
}

6、第一步的时候保留了一个回车键用来退出锁屏,进程退出的时候注意要取消安装的钩子和恢复winlogon.exe进程。

以上,一个简单的锁屏程序就完成了,后面我们就可以再加些为所欲为的功能了,比如开机锁屏,计时锁屏、密码解锁等等。【狗头】

完整代码传送门:

Windows下利用HOOK和进程挂起实现的桌面锁屏-C++文档类资源-CSDN文库https://download.csdn.net/download/hanzhaoqiao1436/87392878

Windows锁屏实现相关推荐

  1. MFC实现Windows锁屏

    编辑 Windows锁屏 锁屏软件相信大家都见过,以前我去网吧上网的时候也用过这个功能,当你有事情需要立即离开,而又不想让别人碰你的电脑,就需要用扫锁屏软件啦,锁住屏幕之后等回来的时候再输入密码解锁. ...

  2. 一键获取Windows锁屏壁纸

    一键获取Windows锁屏壁纸 win10锁屏壁纸每日一图,图片质量相当赞,但奈何系统并没有提供保存方法,每次发现自己喜欢的壁纸都要手动去壁纸的保存目录一个个的找啊翻啊,真心麻烦,而且与壁纸一起存放的 ...

  3. 获取windows锁屏壁纸

    1.找到windows锁屏壁纸的缓存位置 win+r,在运行框中输入 %localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_ ...

  4. php 锁屏,windows锁屏快捷键是什么

    windows锁屏快捷键是"win+L".具体方法:直接按住键盘上的"win+L"组合快捷键即可快速锁屏:也可以点击windows10左下角的"开始& ...

  5. 查看/删除 Windows锁屏及桌面 历史记录

    Windows 默认锁屏壁纸路径:C:\Windows\Web\Screen Windows 默认桌面壁纸路径:C:\Windows\Web\Wallpaper Windows图片内容缓存: C:\U ...

  6. 一键获取windows锁屏壁纸 Windows聚焦

    reference:https://blog.csdn.net/shuangjin0056/article/details/79604474 一键获取Windows锁屏壁纸 win10锁屏壁纸每日一图 ...

  7. python解除windows锁屏_实战 | Python批量提取Win10锁屏壁纸

    使用Win10的朋友会发现,每次开机锁屏界面都会有不一样的漂亮图片,这些图片通常选自优秀的摄影作品,十分精美. 但是由于系统会自动更换这些图片,所以就算再好看的图片,也许下次开机之后就被替换掉了. 借 ...

  8. 如何把windows锁屏画面提取成JPG图像,并作为桌面壁纸

    Win10自带的锁屏界面很多都非常美观,如果我们想要获得其图像,其具体步骤如下: 第一步:找到保存锁屏壁纸的位置, C:\Users\(你的用户名)\AppData\Local\Packages\Mi ...

  9. python解除windows锁屏_用python获取win10锁屏图片

    本文教你如何用python提取win10近期推送的锁屏图片并存储到指定文件夹. 首先保证在个性化页面中的锁屏里选定windows聚焦如下图, 1.png win10近期推送的图片都存储在C:\User ...

  10. Windows锁屏和熄屏

    文章目录 锁屏 熄屏 参考文献 锁屏 Win + L 熄屏 ScreenOff 创建快捷方式 → 快捷键 → Ctrl + Alt + L 参考文献 关闭屏幕快捷键 Windows实现快捷键熄屏功能

最新文章

  1. Go 领军人物谢孟军:智能制造渴望银弹,首先要摒弃偏见
  2. python买什么书好-Python入门经典书籍有哪些?有这三本就够了
  3. LeetCode Find the Difference
  4. webview检测html事件,在JavaFX WebView中检测HTML textarea onkeyup事件
  5. 【Ping】unix - ping命令的退出状态
  6. java = 优化_Java9系列第7篇:Java.util.Optional优化与增强 - 字母哥博客 - 博客园
  7. 最短路径——迪杰斯特拉算法——图的数据结构
  8. iphone如何信任软件_苹果企业开发者证书成漏洞 盗版商发布破解版iPhone应用
  9. 单元格中指定内容标红_按照指定单元格内容进行拆分,想怎么拆就怎么拆
  10. 分享一下自己写的PHP函数
  11. MyBatis 学习之路其一:使用mybatis 创建一个简单的程序
  12. en55032最新标准下载_欧盟CE认证EN55032标准
  13. 你真的搞懂Class,class了么?
  14. 小白想进入IT行业,迷茫选什么职业?
  15. 用tnl实现高可信赖的对象同步机制
  16. 全网搜索一个人的痕迹,爬取百度搜索结果
  17. Hibernate(9)_多对一的关联映射
  18. css元素类型哪几种
  19. 谷歌AlphaFold近日宣称预测出地球上几乎所有蛋白质结构
  20. 刀具、砂轮的过程监视和控制系统

热门文章

  1. 实战windows下nginx负载均衡(请勿转载)
  2. 图深度学习--图论基础
  3. Centos7手动安装OpenStack(Stein版)
  4. 【WinRAR】去除打开后弹出广告的方法
  5. macOS Monterey 12.5Beta1(21G5027d)官方dmg镜像
  6. 程序员面试如何进行正确的自我介绍
  7. docker 人大金仓创建
  8. Self-training with Noisy Student improves ImageNet classification论文解析
  9. 高并发系统架构设计之实战篇34:计数系统设计之计数器设计
  10. 关于内部人员威胁追捕 你需要知道这些