1. 程式人生 > >基於MFC對話方塊程式設計:設定開機自啟動

基於MFC對話方塊程式設計:設定開機自啟動

作業系統: Windows7/Windows10 64位

執行環境: Visual Studio 10

檔案編碼: Unicode

程式設計思路:

  設定自啟動:

    1、定義登錄檔項HKEY heky;

    2、通過RegOpenKeyEx函式開啟電腦的啟動項;

    3、通過GetModuleFileName函式獲取本軟體的全路徑;

    4、通過RegSetValueEx函式添加註冊表項;

  取消自啟動:

    1、通過RegOpenKeyEx函式開啟電腦的啟動項;

    2、通過RegDeleteValue函式刪除登錄檔項;

void CXXXDlg::Autostart()
{
	m_uCheckState = !m_uCheckState;//BOOL型別的成員變數

	HKEY hKey;  
	
	//找到系統的啟動項   
	CString lpRun = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"); 

	if(m_uCheckState)
	{	
		//開啟啟動項Key   
		long lRet = RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_ALL_ACCESS, &hKey);   
		if(lRet == ERROR_SUCCESS)   
		{   
			TCHAR pFileName[MAX_PATH] = {0};   
			
			//得到程式自身的全路徑   
			DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH); 
			TRACE(pFileName);
			
			//新增一個子Key,並設定值 // 下面"Demo"是應用程式名字(不需要加字尾.exe)  
			lRet = RegSetValueEx(hKey, _T("Demo"), 0, REG_SZ, (LPBYTE)pFileName,  (lstrlen(pFileName) + 1)*sizeof(TCHAR));   
			
			//關閉登錄檔   
			RegCloseKey(hKey); 	
			if(lRet != ERROR_SUCCESS)   
			{   
				MessageBox(_T("系統引數錯誤,設定自啟動失敗!"),_T("提示"));    
			}
			else
			{
				MessageBox(_T("開機啟動設定成功!"), _T("提示")); 
			}
		}
		else   
		{   
			MessageBox(_T("系統引數錯誤,設定自啟動失敗!"),_T("提示"));   
		}
	}
	else
	{
		long lRet = RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_ALL_ACCESS, &hKey);   
		if(lRet == ERROR_SUCCESS)   
		{
			RegDeleteValue(hKey, _T("Demo"));
			//關閉登錄檔   
			RegCloseKey(hKey);

			MessageBox(_T("關閉開機啟動成功!"), _T("提示"));   
		}
	} 
}

參考文章: