天天看點

寫系統資料庫設定開機啟動的代碼

[cpp] view plain copy print ?

  1. void CSetDlg::OnBnClickedSetSet()  
  2. {  
  3.     // TODO: 在此添加控件通知處理程式代碼  
  4.     int RunOnStartFlag=0;  
  5.     RunOnStartFlag=m_RunOnStart.GetCheck();  
  6.     if (BST_CHECKED==RunOnStartFlag)  
  7.     {  
  8.         //設定開機啟動  
  9.         //根鍵、子鍵名稱、子鍵句柄  
  10.         HKEY hRoot=HKEY_LOCAL_MACHINE;  
  11.         char szSubKey[MAX_PATH]="Software//Microsoft//Windows//CurrentVersion//Run";  
  12.         HKEY hKey;  
  13.         //打開指定的子鍵  
  14.         //如果不存在,則不建立  
  15.         DWORD dwDisposition=REG_OPENED_EXISTING_KEY;  
  16.         LONG iRet=::RegCreateKeyEx(hRoot,szSubKey,0,NULL,  
  17.             REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,  
  18.             NULL,&hKey,&dwDisposition);  
  19.         //錯誤傳回  
  20.         if (iRet!=ERROR_SUCCESS)  
  21.         {  
  22.             MessageBox("開機啟動設定失敗!");  
  23.         }  
  24.         //得到目前檔案的路徑+檔案名  
  25.         char szFileName[MAX_PATH];  
  26.         ::GetModuleFileName(NULL,szFileName,MAX_PATH);  
  27.         //建立一個新的鍵值  
  28.         iRet=::RegSetValueEx(hKey,"CheckUpdate",0,REG_SZ,  
  29.             (byte*)szFileName,strlen(szFileName));  
  30.         //關閉子鍵句柄  
  31.         ::RegCloseKey(hKey);  
  32.     }  
  33.     if (BST_UNCHECKED==RunOnStartFlag)  
  34.     {  
  35.         //取消開機啟動  
  36.         HKEY hRoot=HKEY_LOCAL_MACHINE;  
  37.         char szSubKey[MAX_PATH]="Software//Microsoft//Windows//CurrentVersion//Run";  
  38.         HKEY hKey;  
  39.         //打開指定的子鍵  
  40.         LONG iRet=::RegOpenKeyEx(hRoot,szSubKey,0,KEY_ALL_ACCESS,&hKey);  
  41.         if (iRet==ERROR_SUCCESS)  
  42.         {  
  43.             ::RegDeleteValue(hKey,"CheckUpdate");  
  44.             //關閉子鍵句柄  
  45.             ::RegCloseKey(hKey);  
  46.         }  
  47.         else  
  48.         {  
  49.             MessageBox("取消開機啟動設定失敗!");  
  50.         }  
  51.     }  
  52. }  

void CSetDlg::OnBnClickedSetSet()

{

// TODO: 在此添加控件通知處理程式代碼

int RunOnStartFlag=0;

RunOnStartFlag=m_RunOnStart.GetCheck();

if (BST_CHECKED==RunOnStartFlag)

{

//設定開機啟動

//根鍵、子鍵名稱、子鍵句柄

HKEY hRoot=HKEY_LOCAL_MACHINE;

char szSubKey[MAX_PATH]="Software//Microsoft//Windows//CurrentVersion//Run";

HKEY hKey;

//打開指定的子鍵

//如果不存在,則不建立

DWORD dwDisposition=REG_OPENED_EXISTING_KEY;

LONG iRet=::RegCreateKeyEx(hRoot,szSubKey,0,NULL,

REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,

NULL,&hKey,&dwDisposition);

//錯誤傳回

if (iRet!=ERROR_SUCCESS)

{

MessageBox("開機啟動設定失敗!");

}

//得到目前檔案的路徑+檔案名

char szFileName[MAX_PATH];

::GetModuleFileName(NULL,szFileName,MAX_PATH);

//建立一個新的鍵值

iRet=::RegSetValueEx(hKey,"CheckUpdate",0,REG_SZ,

(byte*)szFileName,strlen(szFileName));

//關閉子鍵句柄

::RegCloseKey(hKey);

}

if (BST_UNCHECKED==RunOnStartFlag)

{

//取消開機啟動

HKEY hRoot=HKEY_LOCAL_MACHINE;

char szSubKey[MAX_PATH]="Software//Microsoft//Windows//CurrentVersion//Run";

HKEY hKey;

//打開指定的子鍵

LONG iRet=::RegOpenKeyEx(hRoot,szSubKey,0,KEY_ALL_ACCESS,&hKey);

if (iRet==ERROR_SUCCESS)

{

::RegDeleteValue(hKey,"CheckUpdate");

//關閉子鍵句柄

::RegCloseKey(hKey);

}

else

{

MessageBox("取消開機啟動設定失敗!");

}

}

}

基本思路就是先建立一個系統資料庫項,然後打開系統資料庫,再進行寫入,讀取系統資料庫也是類似的,先打開,然後讀取,然後關閉鍵值。

而開機啟動項目是放在系統資料庫的"HKEY_LOCAL_MACHINE//Software//Microsoft//Windows//CurrentVersion//Run"這個項目下的,是以呢隻要向這個地方寫入自己的程式的名稱以及路徑,下次重新啟動機器時,你會發現自己的程式開機啟動了!

貼圖: 

寫系統資料庫設定開機啟動的代碼

自己寫的一段代碼,雖然不怎麼好吧,但是這是自己第一次寫系統資料庫,沒什麼經驗,歡迎拍磚哈!

繼續閱讀