c++ 寫(xiě)注冊(cè)表方式讓程序開(kāi)機(jī)自啟動(dòng)
打開(kāi)注冊(cè)表:win+R, 輸入regedit 點(diǎn)擊確定
你會(huì)看到五個(gè)根目錄,開(kāi)機(jī)自啟動(dòng)的信息寫(xiě)在 HKEY_LOCAL_MACHINE 下面,具體的目錄為 SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
要怎么將開(kāi)機(jī)自啟動(dòng)的信息寫(xiě)入注冊(cè)表中呢?其實(shí)過(guò)程很簡(jiǎn)單,第一步,打開(kāi)注冊(cè)表,第二步,寫(xiě)注冊(cè)表,第三步,關(guān)閉鍵的句柄
打開(kāi)注冊(cè)表要使用RegOpenKeyEx 函數(shù)
LONGRegOpenKeyEx(
HKEYhKey, // 需要打開(kāi)的主鍵的名稱
LPCTSTRlpSubKey, // 需要打開(kāi)的子鍵的名稱
DWORDulOptions, // 保留,設(shè)為0
REGSAM samDesired, // 安全訪問(wèn)標(biāo)記,也就是權(quán)限
PHKEYphkResult // 得到的將要打開(kāi)鍵的句柄
)
第一個(gè)參數(shù),我們要傳入
HKEY_LOCAL_MACHINE
第二個(gè)參數(shù),我們要傳入
SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
第三個(gè)參數(shù),我們要傳入
0
第四個(gè)參數(shù),稍微有點(diǎn)調(diào)皮,很多實(shí)例都傳入KEY_ALL_ACCESS,但是在64位操作系統(tǒng)下,最好傳入KEY_ALL_ACCESS|KEY_WOW64_64KEY,不然寫(xiě)完注冊(cè)表后,不會(huì)顯示寫(xiě)入的注冊(cè)信息
第五個(gè)參數(shù),傳入一個(gè)HKEY的引用即可
寫(xiě)注冊(cè)表使用RegSetValueEx
函數(shù)
LONG RegSetValueEx( HKEY hKey,// RegOpenKeyEx函數(shù)中傳入的最后一個(gè)參數(shù),也就是打開(kāi)的鍵的句柄 LPCTSTR lpValueName, // 鍵的名稱 DWORD Reserved, // 傳入NULL DWORD dwType, // 傳入REG_SZ CONST BYTE *lpData, // 要啟動(dòng)的程序的完整地址 DWORD cbData// lpData的大小 );
貼上代碼,win8 系統(tǒng)下 vs2012
void test()
{
LPCTSTR lpSubKey = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
HKEY hKey;
REGSAM flag = KEY_WOW64_64KEY;
DWORD dwDisposition = REG_OPENED_EXISTING_KEY;
LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS|flag,&hKey);
//LONG lRet = ::RegCreateKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, NULL, NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition);
if ( ERROR_SUCCESS != lRet)
{
return;
}
TCHAR *pchrName = L"D:\\Program Files (x86)\\Tencent\\QQ\\Bin\\QQ.exe";
lRet = ::RegSetValueEx(hKey, TEXT("TEST"), NULL, REG_SZ, (LPBYTE)pchrName, wcslen(pchrName)*sizeof(TCHAR)+1); //設(shè)置注冊(cè)表項(xiàng)
if ( ERROR_SUCCESS != lRet)
{
return;
}
::RegCloseKey(hKey); //與RegCreateKeyEx配對(duì)寫(xiě)
};
還有一點(diǎn)要說(shuō)明,在win8系統(tǒng)下,需要獲得管理員權(quán)限才能正確運(yùn)行上述代碼,否則,無(wú)法打開(kāi)注冊(cè)表
具體方法如下:
VS2012,在項(xiàng)目屬性-配置屬性-鏈接器-清單文件-UAC執(zhí)行級(jí)別
中設(shè)為 requireAdministrator (/level='requireAdministrator')
以管理員身份重新運(yùn)行VS2012
相關(guān)文章
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中堆排序的分析總結(jié)
堆是計(jì)算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個(gè)可以被看做一棵完全二叉樹(shù)的數(shù)組對(duì)象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。本文將通過(guò)圖片詳細(xì)介紹堆排序,需要的可以參考一下2022-04-04
C++實(shí)現(xiàn)LeetCode(20.驗(yàn)證括號(hào))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(20.驗(yàn)證括號(hào)),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
深入解讀C++ 內(nèi)聯(lián)函數(shù)inline|nullptr
內(nèi)聯(lián)函數(shù):用** inline 修飾的函數(shù)叫做內(nèi)聯(lián)函數(shù),編譯時(shí)C++編譯器會(huì)在調(diào)用的地方展開(kāi)內(nèi)聯(lián)函數(shù)**,這樣調(diào)用內(nèi)聯(lián)函數(shù)就需要?jiǎng)?chuàng)建棧楨,就提高效率了,這篇文章給大家介紹C++ 內(nèi)聯(lián)函數(shù)inline|nullptr的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧2024-07-07
c/c++?Error:?redefinition?of?'xxx'的問(wèn)題及解決方法
兩個(gè)類/文件同時(shí)引用定義ReplyInfo的頭文件,會(huì)造成頭文件中定義重復(fù)定義,本文給大家分享c/c++?Error:?redefinition?of?‘xxx’?的問(wèn)題及解決方法,感興趣的朋友一起看看吧2023-08-08
C/C++中棧(stack)&堆(heap)詳解及其作用介紹
這篇文章主要介紹了C/C++中棧(stack)&堆(heap)詳解及其作用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09

