Windows模拟电脑假死之键盘鼠标无响应
Windows模拟电脑假死之键盘鼠标无响应
1. 场景需求
模拟Windows电脑假死,失去键盘鼠标响应。
2. 解决方案
采用Windows系统提供的钩子(Hook) API 拦截系统鼠标键盘消息。
3. 示例程序
【1】. 创建MFC对话框项目
新建一个MFC应用程序项目,项目名称取名为 "FakeDeath" ,如下图所示:

应用程序类型,选择【基于对话框】项目。

其余配置选项,默认即可。
创建完成。

【2】. 编译并运行程序
右键项目名称,选择【生成】。

运行程序。

【3】. 编辑对话框
调取《资源视图》界面,编辑对话框控件。


双击【键盘鼠标假死】按钮,向导会自动进入到对应按钮的处理函数上。

【4】. 添加键盘鼠标系统钩子
键盘鼠标系统钩子代码如下:
/*------------------------------------开始添加键盘鼠标系统钩子代码--------------------------------*///鼠标钩子句柄;
HHOOK g_hMouseHook = nullptr;
//键盘钩子句柄;
HHOOK g_hKeyboardHook = nullptr;//安装钩子;
void InstallSysHook();
//卸载钩子;
void UninstallSysHook();//键盘钩子处理函数;
static LRESULT CALLBACK OnKeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam);
//鼠标钩子处理函数;
static LRESULT CALLBACK OnMouseHookProc(int nCode, WPARAM wParam, LPARAM lParam);/
/
/
void InstallSysHook()
{g_hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, OnMouseHookProc, GetModuleHandleA(0), 0);g_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, OnKeyboardHookProc, GetModuleHandleA(0), 0);
}void UninstallSysHook()
{if (g_hKeyboardHook){UnhookWindowsHookEx(g_hKeyboardHook);}if (g_hMouseHook){UnhookWindowsHookEx(g_hMouseHook);}
}LRESULT CALLBACK OnKeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{if (nCode == HC_ACTION){// 【A】键盘按下时程序结束KBDLLHOOKSTRUCT *ks = (KBDLLHOOKSTRUCT*)lParam;if (ks->vkCode == 'A'){UninstallSysHook();exit(0);}}// return CallNextHookEx(g_hKeyboardHook, nCode, wParam, lParam);return 1;
}LRESULT CALLBACK OnMouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{if (nCode == HC_ACTION){// 处理鼠标消息;// ...}// return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);return 1;
}/*-----------------------------------键盘鼠标系统钩子添加结束--------------------------------*/
FakeDeathDlg.cpp源文件修改如下
// FakeDeathDlg.cpp : 实现文件
//#include "stdafx.h"
#include "FakeDeath.h"
#include "FakeDeathDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{
public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现
protected:DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()// CFakeDeathDlg 对话框CFakeDeathDlg::CFakeDeathDlg(CWnd* pParent /*=NULL*/): CDialogEx(CFakeDeathDlg::IDD, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CFakeDeathDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CFakeDeathDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BTN_INSTALL, &CFakeDeathDlg::OnBnClickedBtnInstall)
END_MESSAGE_MAP()// CFakeDeathDlg 消息处理程序BOOL CFakeDeathDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon, FALSE); // 设置小图标// TODO: 在此添加额外的初始化代码return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}void CFakeDeathDlg::OnSysCommand(UINT nID, LPARAM lParam)
{if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}
}// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。void CFakeDeathDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CFakeDeathDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}/*---------------------------------开始添加键盘鼠标系统钩子代码-----------------------------------*///鼠标钩子句柄;
HHOOK g_hMouseHook = nullptr;
//键盘钩子句柄;
HHOOK g_hKeyboardHook = nullptr;//安装钩子;
void InstallSysHook();
//卸载钩子;
void UninstallSysHook();//键盘钩子处理函数;
static LRESULT CALLBACK OnKeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam);
//鼠标钩子处理函数;
static LRESULT CALLBACK OnMouseHookProc(int nCode, WPARAM wParam, LPARAM lParam);/
/
/
void InstallSysHook()
{g_hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, OnMouseHookProc, GetModuleHandleA(0), 0);g_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, OnKeyboardHookProc, GetModuleHandleA(0), 0);
}void UninstallSysHook()
{if (g_hKeyboardHook){UnhookWindowsHookEx(g_hKeyboardHook);}if (g_hMouseHook){UnhookWindowsHookEx(g_hMouseHook);}
}LRESULT CALLBACK OnKeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{if (nCode == HC_ACTION){// 【A】键盘按下时程序结束KBDLLHOOKSTRUCT *ks = (KBDLLHOOKSTRUCT*)lParam;if (ks->vkCode == 'A'){UninstallSysHook();exit(0);}}// return CallNextHookEx(g_hKeyboardHook, nCode, wParam, lParam);return 1;
}LRESULT CALLBACK OnMouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{if (nCode == HC_ACTION){// 处理鼠标消息;// ...}// return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);return 1;
}/*--------------------------------------键盘鼠标系统钩子添加结束--------------------------------*/// 键盘鼠标假死按钮处理函数
void CFakeDeathDlg::OnBnClickedBtnInstall()
{// 安装系统钩子;InstallSysHook();
}
【5】. 运行效果
点击【鼠标键盘假死】按钮后,桌面进入假死状态,除了【Ctrl+Alt+Delete】和【A】键外,其他键盘和鼠标输入均不响应。

相关文章:
Windows模拟电脑假死之键盘鼠标无响应
Windows模拟电脑假死之键盘鼠标无响应 1. 场景需求 模拟Windows电脑假死,失去键盘鼠标响应。 2. 解决方案 采用Windows系统提供的钩子(Hook) API 拦截系统鼠标键盘消息。 3. 示例程序 【1】. 创建MFC对话框项目 新建一个MFC应用程序项目,项目名称…...
一文详解线程池
什么是线程池? 线程池:就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。 为什么用线程池? 线程池的优势:线程池做的工作…...
网际报文协议ICMP及ICMP重定向实例详解2
之前在一个项目中遇到了与ICMP重定向相关的问题,因为缺乏对ICMP相关内容的了解,排查了很长一段时间才查出来。本文给大家简要地介绍一下ICMP及ICMP重定向相关的内容。 1、ICMP的概念 ICMP(Internet Control Message Protocol)网际…...
CSS 总结
CSS 总结 引言 CSS(层叠样式表)是网页设计中不可或缺的一部分,它用于控制网页的布局和样式。本文将对CSS的基本概念、关键特性、常用属性以及最佳实践进行总结,旨在帮助读者深入理解并有效运用CSS。 CSS基本概念 1. 什么是CSS? CSS是一种样式表语言,用于描述HTML或X…...
C语言_指针_进阶
引言:在前面的c语言_指针初阶上,我们了解了简单的指针类型以及使用,下面我们将进入更深层次的指针学习,对指针的理解会有一个极大的提升。从此以后,指针将不再是难点,而是学习底层语言的一把利器。 本章重点…...
chat_gpt回答:python使用writearray写tiff速度太慢,有什么快速的方法吗
如果你在使用 Python 的 tifffile 库(或类似库)写入 TIFF 文件时速度太慢,以下是几个加速写入的优化方法和替代方案: 1. 优化文件压缩设置 TIFF 支持压缩格式,但压缩过程可能非常耗时。如果你不需要压缩,…...
【时时三省】(C语言基础)函数介绍strcat
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 strcat 字符串追加 示例: 比如我要把world加到hello后面去 就可以用这个 还有一种方法是这样 这两个代码的意思是一样的 只是写法不一样 写的时候要注意这些 •源字符串必须…...
ESP32C3 开发板在Linux环境下,进行JTAG 调试演示-启明云端乐鑫代理商
JTAG 调试教程 本教程主要演示 esp32c3 开发板在 linux 环境下,通过 vscode 的 esp-idf 插件使用 jtag 调试工具。 esp32c3 不但内置了USB-JTAG,还内置了USB-SERIAL,仅需要一根USB线即可实现下载和调试仿真。 下面演示调试仿真的过程。 创…...
《计算机视觉》—— 基于PyCharm中的dlib库实现人脸关键点定位
文章目录 1. 安装必要的库2. 下载dlib的人脸检测器和关键点预测器模型3. 编写代码 人脸关键点定位是指通过计算机视觉技术,识别和定位人脸图像中的关键点,如眼睛、鼻子、嘴巴等特定位置。这些关键点的准确定位对于人脸识别、表情分析、姿态估计等应用具有…...
c++习题34-说谎
目录 一,题目 二,思路 三,代码 一,题目 描述 ljc以自己的人格担保他最后一个回答一定是正确的,但并不保证其它的回答是对的。 每个数为ljc对上一个的回答,若为0表示说上句话是错的,若为…...
如何使用Android Profiler进行性能分析?
Android Profiler是Android Studio中一个功能强大的性能分析工具,它可以帮助开发者实时监控应用的CPU、内存、网络、电量和图形渲染等性能指标,从而发现并解决性能瓶颈。以下是如何使用Android Profiler进行性能分析的详细步骤和技巧。 一、准备工作 安…...
整理—MySQL
目录 NOSQL和SQL的区别 数据库三大范式 MySQL 怎么连表查询 MySQL如何避免重复插入数据? CHAR 和 VARCHAR有什么区别? Text数据类型可以无限大吗? 说一下外键约束 MySQL的关键字in和exist mysql中的一些基本函数 SQL查询语句的执行顺…...
临时配置linux Bridge网桥
Linux Bridge(网桥)是用纯软件实现的虚拟交换机,有着和物理交换机相同的功能,例如二层交换,MAC地址学习等。因此我们可以把tun/tap,veth pair等设备绑定到网桥上,就像是把设备连接到物理交换机上…...
【Canvas与化学】铁元素图标
【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>铁元素图标Draft1</title><style type"text/css"…...
list转map常用方法
利用Collectors.toMap收集指定属性 public Map<Long, String> getIdNameMap(List<Account> accounts) {return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername)); } 收集对象实体本身 - 在开发过程中我们也需要有时候对自己…...
C++容器适配器的模拟实现-stack、queue、priority_queue
### 容器适配器是将容器转换到其他容器自身不方便使用的地方,但是就容器适配器其本身还是包装的容器,所以这个类模板中各个接口的实现都是调用的容器的接口,因为容器适配器可能适配多个容器,所以这个类模板的模板参数中有一个参数…...
fastapi的docs页面是空白解决
环境:openEuler、python 3.11.6、fastapi 0.115.2 背景:居家办公,默认搭建的fastapi的docs接口为空白 时间:20241016 说明:网上很多教程的缺点是复杂(但是能够了解的更清楚),使用…...
浙大数据结构:11-散列4 Hashing - Hard Version
这道题主要在于思路,感觉像个模拟题,用到了线性探测的算法 机翻 1、条件准备 visit数组看这个位置有没有放进来数,num存非负整数,s存未到放入时机的数。 answer存答案。n为总共数量。 #include <iostream> #include<…...
pm2 守护http-server
PM2(Process Manager 2)是一个用于Node.js应用程序的进程管理器。以下是使用PM2守护HTTP服务器的步骤: 1. 安装PM2 如果你还没有安装PM2,可以使用以下命令安装: npm install pm2 -g 2. 启动HTTP服务器 你需要一个HTT…...
国外电商系统开发-运维系统应用管理
还记得您常用的 service httpd start 、service sshd stop这样的命令吗?这些都是在停止启动服务,为了让研发人员,或者是快速操作服务,这里给大家制定了简单的应用管理。在这里,您可以把上面的命令加入进来,…...
3个关键功能解析:USBToolBox如何简化macOS与Windows的USB端口映射难题
3个关键功能解析:USBToolBox如何简化macOS与Windows的USB端口映射难题 【免费下载链接】tool the USBToolBox tool 项目地址: https://gitcode.com/gh_mirrors/too/tool 在Hackintosh和跨平台开发领域,USB端口映射一直是个令人头疼的技术难题。US…...
智能手机相机光谱特性测量与多光谱成像技术
1. 智能手机相机光谱特性测量基础智能手机相机的光谱灵敏度函数(Spectral Sensitivity Function, SSF)和透射率函数是计算摄影领域的核心参数,它们决定了设备对光信号的响应特性。准确获取这些参数对色彩还原、光谱重建和白平衡校准等任务至关重要。1.1 光谱灵敏度函…...
3步解锁专业级MMD创作:Blender插件如何重塑二次元动画工作流
3步解锁专业级MMD创作:Blender插件如何重塑二次元动画工作流 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …...
skills CANN开源社区贡献技能包开发指南
前言 开源社区的健康运转,不仅依赖核心代码的贡献,还需要降低贡献门槛、提供清晰的指南和自动化工具。skills仓库是CANN开源社区的"贡献技能包",提供了一系列辅助脚本、代码模板、CI检查和文档生成工具,帮助新手快速上…...
AI圈内火热的Agent、MCP、Skill、CLI是啥?用装修房子讲透,看完秒懂
本文用装修房子的比喻,详细解释了AI领域的四个核心概念:Agent如同会自主规划任务的私人助理;MCP是AI与外部工具数据的统一接口,类似USB-C;Skill是指导AI按标准操作执行的手册;CLI则是不依赖图形界面的命令行…...
如何快速掌握MoveIt2:面向ROS 2开发者的工业机器人运动规划完整指南
如何快速掌握MoveIt2:面向ROS 2开发者的工业机器人运动规划完整指南 【免费下载链接】moveit2 :robot: MoveIt for ROS 2 项目地址: https://gitcode.com/gh_mirrors/mo/moveit2 想要为你的机器人实现智能运动规划吗?MoveIt2作为ROS 2生态中最强大…...
HoRain云--CLAUDE.md 使用指南
🎬 HoRain云小助手:个人主页 🔥 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!…...
告别坐标点击!用Poco精准定位UI控件,让你的Airtest安卓自动化脚本更稳定
告别坐标点击!用Poco精准定位UI控件,让你的Airtest安卓自动化脚本更稳定每次UI微调就导致脚本大面积失效?分辨率变化让精心编写的自动化测试瞬间崩溃?作为从坐标点击转型到控件识别的实践者,我深刻理解这种挫败感。三年…...
AutoPentest:面向红队的渗透测试决策引擎架构解析
1. 这不是又一个“自动化扫描器”,而是一套能替你做决策的渗透测试工作流引擎AutoPentest这个名字,第一眼容易让人联想到Nmap加个for循环、或者Burp Suite里点几下Intruder——但实际用过的人很快会意识到:它根本不在同一个维度上。我第一次在…...
告别KITTI!用TartanAir数据集在Unreal Engine+AirSim里复现那些让VSLAM算法“翻车”的雨天和黑夜
超越KITTI:用TartanAir数据集在虚拟极端环境中锤炼VSLAM算法当视觉SLAM算法在KITTI数据集上取得95%的准确率时,开发者们常常会松一口气——直到这些算法被部署到真实世界的雨夜街道上。突然之间,那些在阳光明媚的德国道路上表现优异的特征点检…...
