operatereg.exe【C++】是一款非常方便笔记本电脑键盘功能禁用脚本,支持开启禁用笔记本键盘,需要右键以管理员身份运行此程序,运行后重新启动计算机!您还在为老是误触而烦恼吗?
软件说明
之所以写这个程序,是因为宿舍桌子太小。有时把外接键盘叠在笔记本键盘上,容易误触到笔记本键盘,从而导致一些莫名其妙的问题困扰自己。
于是找了些资料了解到了如何禁用笔记本键盘的方法:
+ 禁用设备法。详细教程请点击 [这里](https://jingyan.baidu.com/article/77b8dc7fb9aa336175eab674.html)
+ 修改注册表法。详细教程请点击 [这里](https://www.52pojie.cn/thread-1445700-1-2.html)
可能会有人问:为什么不省事点选用禁用设备法,而是写代码再来操作注册表,来禁用键盘这么麻烦的方法呢?原因很简单,突然对编程语言操作注册表很感兴趣,就这么做了。
简单介绍注册表
注册表结构类似文件目录:分为根键、子键和键值项三部分,与文件目录对应的话就是根目录、子目录和文件。简单介绍一下这三部分:
(1)根键
分为5个:HKEY_CLASSES_ROOT, HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS和HKEY_CURRENT_CONFIG
(2)子键
可以有多个子键和键值项,就像一个目录中可以有多个子目录和多个文件一样。
(3)键值项
**可以理解为文件,它由三部分组成,分别为 :名称、类型、数据。其中类型主要有:
REG_BINARY 二进制数据
REG_DWORD 32位双字节数据
REG_SZ 以0结尾的字符串
REG_DWORD_BIG_ENDIAN 高位排在底位的双字
REG_EXPAND_SZ 扩展字符串,可以加入变量如%PATH%
REG_LINK UNICODE 符号链接
REG_RESOURCE_LIST 设备驱动程序资源列表
REG_MULTI_SZ 多字符串
注册表数据项的数据类型有8种,最常用的是前3种。
操作注册表的几个API函数
需要头文件:atlbase.h
(1)打开一个键

(2)查询某一个键值

(3)设置一个键值

(4)新建指定键

(5)删除注册表指定键下的值

删除注册表项

RegDeleteKey 也可用来删除一个键值。在 Win 95/98 平台下,也可用来删除整个子键和键值。但是在Windows NT/2000平台下,只能用来删除没有子键的键。
使用说明
工具需要以管理员方式启动

特别声明
+由于修改注册表后,需要重启电脑后才能生效。所以代码中加入了询问“是否立刻重启”的语句
源码说明
#include <iostream>
#include <atlbase.h>
#include <Windows.h>
using namespace std;
void write_dword();
//测试成功,读取到start的当前值//读取操作表,其类型为DWORD
void read_dword(){
HKEY hKEY;//定义有关的键,在查询结束时关闭
//打开与路径data_Set相关的hKEY
char i,x;
LPCTSTR data_set = _T("SYSTEM\\CurrentControlSet\\Services\\i8042prt");
//访问注册表,hKEY则保存此函数所打开的键的句柄
if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_READ, &hKEY)){
DWORD dwValue;//长整型数据,如果是字符串数据用char数组
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_DWORD;
if (::RegQueryValueEx(hKEY, _T("Start"), 0, &dwType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS)
cout << "错误:无法查询有关的注册表信息" << endl;
switch (dwValue){
case 3:
cout << "当前笔记本键盘状态为:启用 " << "(" << hex << dwValue << ")" << endl << endl << "若需要禁用请输入字母:y或Y" << endl;
cin >> i;
if (i == 'y'|| i == 'Y') {
write_dword();
}
break;
case 4:
cout << "当前笔记本键盘状态为:禁用 " << "(" << hex << dwValue << ")" << endl << endl << "若需要启用请输入字母:y或Y" << endl;
cin >> x;
if (x == 'y' || x == 'Y') {
write_dword();
}
break;
default:
cout << "当前笔记本键盘状态获取未知 " << "(" << hex << dwValue << ")" << endl << endl;
break;
}
}
::RegCloseKey(hKEY);
}
//测试成功,读取到start设备名displayname//读取操作表,其类型为REG_SZ
void read_reg_sz(){
HKEY hkey;
LPCTSTR data_set = _T("SYSTEM\\CurrentControlSet\\Services\\i8042prt");
if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_READ, &hkey)){
char dwValue[256];
DWORD dwSzType = REG_SZ;
DWORD dwSize = sizeof(dwValue);
if (::RegQueryValueEx(hkey, _T("DisplayName"), 0, &dwSzType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS){
cout << "无法查询有关的注册表信息" << endl << endl;
}
cout << "当前设备名:" << dwValue << endl << endl;
}
::RegCloseKey(hkey);
}
//测试成功,更改(创建)到start键值//在SYSTEM\CurrentControlSet\Services\i8042prt文件夹下读取Start的子键,设置其值为dwValue
void write_dword(){
HKEY hkey;//定义有关的hkey,在查询结束时要关闭
HKEY hTempKey;
char ans;
int flag;
DWORD dwValue;
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_DWORD;
LPCTSTR data_set = _T("SYSTEM\\CurrentControlSet\\Services\\i8042prt");
cout << "请设置当前笔记本键盘状态,输入数字:3,表示开启键盘;输入数字4,表示禁用键盘;" << endl;
cin >> flag;
switch (flag) {
case 3:
dwValue = flag; break;
case 4:
dwValue = flag; break;
default:
cout << "状态值输入错误" << endl; break;
}
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey)){
//if (ERROR_SUCCESS == ::RegCreateKey(hkey, _T("解开该段落注释,则可更改为:在SYSTEM\\CurrentControlSet\\Services\\i8042prt下,创建以'该文本内容'为名称的子健,并创建一个名为“Start”的子健,其值为:dwValue"), &hTempKey)){
if (ERROR_SUCCESS != ::RegSetValueEx(hkey, _T("Start"), 0, REG_DWORD, (CONST BYTE*) & dwValue, sizeof(DWORD))){
cout << "写入注册表失败" << endl;
}
cout << "修改成功!" << endl << "是否立刻重启电脑,使设置立即生效?" << endl << "输入y或Y,以立刻重新启动电脑;输入n或N退出程序" << endl;
cin >> ans;
if (ans == 'y' || ans == 'Y') {
cout << "再次确认,要立刻重启电脑吗?\n\n输入y或Y,以立刻重新启动电脑;输入n或N退出程序" << endl;
cin >> ans;
if (ans == 'y' || ans == 'Y')
system("shutdown -r -t 0");
}
else
exit(1);
//}
}
::RegCloseKey(hkey);
}
//测试成功,更改(创建)子键test111及其键值项Name到start键值
void write_binary(){
HKEY hkey;
HKEY hTempKey;
BYTE m_name[10];
memset(m_name, 0, sizeof(m_name));
m_name[0] = 0xff;
m_name[1] = 0xac;
m_name[2] = 0x05;
m_name[3] = 0x4e;
LPCTSTR data_set = _T("SYSTEM\\CurrentControlSet\\Services\\i8042prt");
if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey)){
if (ERROR_SUCCESS == ::RegCreateKey(hkey, _T("test111"), &hTempKey)){
if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, _T("Name"), 0, REG_BINARY, (unsigned char*)m_name, 5)){
cout << "写入错误" << endl;
}
}
}
::RegCloseKey(hkey);
}
//测试成功,更改(创建)子键test111及其键值项Name到start键值
void write_reg_sz(){
HKEY hkey;
HKEY hTempKey;
char m_name_set[256] = "China";
DWORD len = strlen(m_name_set) + 1;
LPCTSTR data_set = _T("SYSTEM\\CurrentControlSet\\Services\\i8042prt");
if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey)){
if (ERROR_SUCCESS == ::RegCreateKey(hkey, _T("test111"), &hTempKey)){
if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, _T("Name"), 0, REG_SZ, (const BYTE*)m_name_set, len)){
cout << "写入错误" << endl;
}
}
}
::RegCloseKey(hkey);
}
//测试成功,将键值项Name删除
void delete_value()
{
HKEY hkey;
LPCTSTR data_set = _T("SYSTEM\\CurrentControlSet\\Services\\i8042prt\\test111");
if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey))
{
if (ERROR_SUCCESS != ::RegDeleteValue(hkey, _T("Name")))
{
cout << "删除错误" << endl;
}
}
::RegCloseKey(hkey);
}
//测试成功,将子键test111删除
void delete_key(){
HKEY hkey;
LPCTSTR data_set = _T("SYSTEM\\CurrentControlSet\\Services\\i8042prt");
if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey)){
if (ERROR_SUCCESS != ::RegDeleteKey(hkey, "test111")){
cout << "删除错误" << endl;
}
}
::RegCloseKey(hkey);
}
void menu(){
cout << "欢迎使用本工具" << endl << endl;
read_reg_sz();
cout << endl << "已为您查询到该笔记本当前键盘状态为:" ;
read_dword();
}
int main(){
menu();
system("pause");
return 0;
}























大小: 1KB
大小: 25.0M
雷柏对码软件(雷柏无线键鼠失灵解决方案)v4.0.1中文版
超级鼠标键盘精灵v3.0 绿色版
通用按键精灵(自动按键)V1.56 绿色版
魔兽争霸改键、显血工具(xlWarKey)v1.2 正式版
华华鼠标自动点击器4.6 绿色去广告版
圣剑鼠标指针绿色版
罗技鼠标驱动 64位版6.52.74 官方完整版
小贝鼠标连点器3.2 中文绿色版
键盘键位修改工具(Remapkey)0.99 中文版
键盘按键设置软件(MapKeyboard)2.1 绿色版
鼠标速率测试器(Mouse Rate Checker)1.1B汉化绿色特别版
键盘记录器2.0 免费版
达尔优牧马人wcg白色版游戏鼠标驱动v1.1 官方最新版
达尔优108机械合金版键盘驱动
模拟精灵V9.01绿色免费版
雷柏7200P鼠标对码程序v3.2.0 官方版
键盘鼠标录制精灵V4.0 绿色版