operatereg.exe【C++】是一款非常方便筆記本電腦鍵盤(pán)功能禁用腳本,支持開(kāi)啟禁用筆記本鍵盤(pán),需要右鍵以管理員身份運(yùn)行此程序,運(yùn)行后重新啟動(dòng)計(jì)算機(jī)!您還在為老是誤觸而煩惱嗎? 軟件說(shuō)明之所以寫(xiě)這個(gè)程序,是因?yàn)樗奚嶙雷犹。有時(shí)把外接鍵盤(pán)疊在筆記本鍵盤(pán)上,容易誤觸到筆記本鍵盤(pán),從而導(dǎo)致一些莫名其妙的問(wèn)題困擾自己。 于是找了些資料了解到了如何禁用筆記本鍵盤(pán)的方法: + 禁用設(shè)備法。詳細(xì)教程請(qǐng)點(diǎn)擊 [這里](https://jingyan.baidu.com/article/77b8dc7fb9aa336175eab674.html) + 修改注冊(cè)表法。詳細(xì)教程請(qǐng)點(diǎn)擊 [這里](https://www.52pojie.cn/thread-1445700-1-2.html) 可能會(huì)有人問(wèn):為什么不省事點(diǎn)選用禁用設(shè)備法,而是寫(xiě)代碼再來(lái)操作注冊(cè)表,來(lái)禁用鍵盤(pán)這么麻煩的方法呢?原因很簡(jiǎn)單,突然對(duì)編程語(yǔ)言操作注冊(cè)表很感興趣,就這么做了。 簡(jiǎn)單介紹注冊(cè)表注冊(cè)表結(jié)構(gòu)類似文件目錄:分為根鍵、子鍵和鍵值項(xiàng)三部分,與文件目錄對(duì)應(yīng)的話就是根目錄、子目錄和文件。簡(jiǎn)單介紹一下這三部分: (1)根鍵 分為5個(gè):HKEY_CLASSES_ROOT, HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS和HKEY_CURRENT_CONFIG (2)子鍵 可以有多個(gè)子鍵和鍵值項(xiàng),就像一個(gè)目錄中可以有多個(gè)子目錄和多個(gè)文件一樣。 (3)鍵值項(xiàng) **可以理解為文件,它由三部分組成,分別為 :名稱、類型、數(shù)據(jù)。其中類型主要有: 操作注冊(cè)表的幾個(gè)API函數(shù) 需要頭文件:atlbase.h (1)打開(kāi)一個(gè)鍵 ![]() (2)查詢某一個(gè)鍵值 (3)設(shè)置一個(gè)鍵值 ![]() (4)新建指定鍵 (5)刪除注冊(cè)表指定鍵下的值 ![]() 刪除注冊(cè)表項(xiàng) RegDeleteKey 也可用來(lái)刪除一個(gè)鍵值。在 Win 95/98 平臺(tái)下,也可用來(lái)刪除整個(gè)子鍵和鍵值。但是在Windows NT/2000平臺(tái)下,只能用來(lái)刪除沒(méi)有子鍵的鍵。 使用說(shuō)明工具需要以管理員方式啟動(dòng) ![]() 特別聲明+由于修改注冊(cè)表后,需要重啟電腦后才能生效。所以代碼中加入了詢問(wèn)“是否立刻重啟”的語(yǔ)句 源碼說(shuō)明#include <iostream> #include <atlbase.h> #include <Windows.h> using namespace std; void write_dword(); //測(cè)試成功,讀取到start的當(dāng)前值//讀取操作表,其類型為DWORD void read_dword(){ HKEY hKEY;//定義有關(guān)的鍵,在查詢結(jié)束時(shí)關(guān)閉 //打開(kāi)與路徑data_Set相關(guān)的hKEY char i,x; LPCTSTR data_set = _T("SYSTEM\\CurrentControlSet\\Services\\i8042prt"); //訪問(wèn)注冊(cè)表,hKEY則保存此函數(shù)所打開(kāi)的鍵的句柄 if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_READ, &hKEY)){ DWORD dwValue;//長(zhǎng)整型數(shù)據(jù),如果是字符串?dāng)?shù)據(jù)用char數(shù)組 DWORD dwSize = sizeof(DWORD); DWORD dwType = REG_DWORD; if (::RegQueryValueEx(hKEY, _T("Start"), 0, &dwType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS) cout << "錯(cuò)誤:無(wú)法查詢有關(guān)的注冊(cè)表信息" << endl; switch (dwValue){ case 3: cout << "當(dāng)前筆記本鍵盤(pán)狀態(tài)為:?jiǎn)⒂?" << "(" << hex << dwValue << ")" << endl << endl << "若需要禁用請(qǐng)輸入字母:y或Y" << endl; cin >> i; if (i == 'y'|| i == 'Y') { write_dword(); } break; case 4: cout << "當(dāng)前筆記本鍵盤(pán)狀態(tài)為:禁用 " << "(" << hex << dwValue << ")" << endl << endl << "若需要啟用請(qǐng)輸入字母:y或Y" << endl; cin >> x; if (x == 'y' || x == 'Y') { write_dword(); } break; default: cout << "當(dāng)前筆記本鍵盤(pán)狀態(tài)獲取未知 " << "(" << hex << dwValue << ")" << endl << endl; break; } } ::RegCloseKey(hKEY); } //測(cè)試成功,讀取到start設(shè)備名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 << "無(wú)法查詢有關(guān)的注冊(cè)表信息" << endl << endl; } cout << "當(dāng)前設(shè)備名:" << dwValue << endl << endl; } ::RegCloseKey(hkey); } //測(cè)試成功,更改(創(chuàng)建)到start鍵值//在SYSTEM\CurrentControlSet\Services\i8042prt文件夾下讀取Start的子鍵,設(shè)置其值為dwValue void write_dword(){ HKEY hkey;//定義有關(guān)的hkey,在查詢結(jié)束時(shí)要關(guān)閉 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 << "請(qǐng)?jiān)O(shè)置當(dāng)前筆記本鍵盤(pán)狀態(tài),輸入數(shù)字:3,表示開(kāi)啟鍵盤(pán);輸入數(shù)字4,表示禁用鍵盤(pán);" << endl; cin >> flag; switch (flag) { case 3: dwValue = flag; break; case 4: dwValue = flag; break; default: cout << "狀態(tài)值輸入錯(cuò)誤" << endl; break; } if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_set, 0, KEY_SET_VALUE, &hkey)){ //if (ERROR_SUCCESS == ::RegCreateKey(hkey, _T("解開(kāi)該段落注釋,則可更改為:在SYSTEM\\CurrentControlSet\\Services\\i8042prt下,創(chuàng)建以'該文本內(nèi)容'為名稱的子健,并創(chuàng)建一個(gè)名為“Start”的子健,其值為:dwValue"), &hTempKey)){ if (ERROR_SUCCESS != ::RegSetValueEx(hkey, _T("Start"), 0, REG_DWORD, (CONST BYTE*) & dwValue, sizeof(DWORD))){ cout << "寫(xiě)入注冊(cè)表失敗" << endl; } cout << "修改成功!" << endl << "是否立刻重啟電腦,使設(shè)置立即生效?" << endl << "輸入y或Y,以立刻重新啟動(dòng)電腦;輸入n或N退出程序" << endl; cin >> ans; if (ans == 'y' || ans == 'Y') { cout << "再次確認(rèn),要立刻重啟電腦嗎?\n\n輸入y或Y,以立刻重新啟動(dòng)電腦;輸入n或N退出程序" << endl; cin >> ans; if (ans == 'y' || ans == 'Y') system("shutdown -r -t 0"); } else exit(1); //} } ::RegCloseKey(hkey); } //測(cè)試成功,更改(創(chuàng)建)子鍵test111及其鍵值項(xiàng)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 << "寫(xiě)入錯(cuò)誤" << endl; } } } ::RegCloseKey(hkey); } //測(cè)試成功,更改(創(chuàng)建)子鍵test111及其鍵值項(xiàng)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 << "寫(xiě)入錯(cuò)誤" << endl; } } } ::RegCloseKey(hkey); } //測(cè)試成功,將鍵值項(xiàng)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 << "刪除錯(cuò)誤" << endl; } } ::RegCloseKey(hkey); } //測(cè)試成功,將子鍵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 << "刪除錯(cuò)誤" << endl; } } ::RegCloseKey(hkey); } void menu(){ cout << "歡迎使用本工具" << endl << endl; read_reg_sz(); cout << endl << "已為您查詢到該筆記本當(dāng)前鍵盤(pán)狀態(tài)為:" ; read_dword(); } int main(){ menu(); system("pause"); return 0; } 沒(méi)有驅(qū)動(dòng)程序,計(jì)算機(jī)中的硬件就無(wú)法工作。安裝新硬件時(shí),驅(qū)動(dòng)程序是一項(xiàng)不可或缺的重要元件。 |
1xps15重裝系統(tǒng)(安裝系統(tǒng))圖文詳細(xì)教程
2Win10系統(tǒng)QQ瀏覽器頁(yè)面總是崩潰怎樣辦!
3一鍵重裝windows10系統(tǒng)圖文詳細(xì)教程
4教你進(jìn)入WindowsXP系統(tǒng)后假死機(jī)的處理辦法
5win10系統(tǒng)電腦zip文件打開(kāi)不了的處理辦法
6筆記本電腦沒(méi)有聲音怎樣辦,本文教您筆記本電腦沒(méi)有...
8電腦系統(tǒng)一鍵自動(dòng)重裝圖文詳細(xì)教程
10電腦無(wú)法開(kāi)機(jī)系統(tǒng)一鍵重裝系統(tǒng)(安裝系統(tǒng))設(shè)置步驟
1深度技術(shù)win10正式版ghost(32位)旗艦......
2番茄花園win10 X86 ghost 標(biāo)準(zhǔn)通......
3番茄花園Win10_Ghost Win10 64......
4雨林木風(fēng) GHOST WIN10 X64 快速裝......
5深度技術(shù)GHOST WIN10 X64 尊貴專業(yè)......
6筆記本W(wǎng)in10系統(tǒng) 64位官方正式版2023年......
7筆記本win10正式版ghost(32位)旗艦免......
8雨林木風(fēng)win10(32位)ghost 修正專業(yè)......