註冊表的編寫

常用函數 ☆ 打開一個鍵的函數:RegOpenKeyEx
    函數定義:LONG RegOpenKeyEx(HKEY hKey,//已經打開的鍵的句柄,或者直接是上述幾個根鍵
                                LPCTSTR lpSubKey,//要打開的子鍵名字的地址
                                DWORD ulOptions,//保留值,必須爲0
                                REGSAM samDesired,//打開方式,如讀還是寫
                                PHKEY phkResult//返回的打開的子鍵的句柄
                               );

☆ 查詢某一個鍵值:RegQueryValueEx
    函數定義:LONG RegQueryValueEx(HKEY hKey,//要查詢的鍵的句柄
                                   LPCTSTR lpValueName,//要查詢的鍵值的名稱
                                   LPDWORD lpReserved,//保留值
                                   LPDWORD lpType,//要查詢的數據的類型
                                   LPBYTE lpData,//要返回的查詢的數據
                                   LPDWORD lpcbData//預置的數據的長度
                                  );

☆ 設置一個鍵值RegSetValueEx
    函數定義:LONG RegSetValueEx(HKEY hKey,//要設置的鍵的句柄
                                 LPCTSTR lpValueName,//要訪問的鍵值的名稱
                                 LPDWORD lpReserved,//保留值
                                 DWORD dwType,//要設置的數據的類型
                                 const BYTE *lpData,//要設置的健值
                                 DWORD cbData//數據的長度
                                );

e.g.1

BOOL IsFlashPlayerExist()
{
 HKEY   hResult;
 CString m_strkey1=_T("SOFTWARE//Macromedia//FlashPlayerActiveX");
 CString m_strkey2=_T("SOFTWARE//Macromedia//FlashPlayerPlugin");
 if(ERROR_SUCCESS!=RegOpenKeyEx(HKEY_LOCAL_MACHINE,m_strkey2,0,KEY_QUERY_VALUE,&hResult)&&
    ERROR_SUCCESS!=RegOpenKeyEx(HKEY_LOCAL_MACHINE,m_strkey1,0,KEY_QUERY_VALUE,&hResult))
  return FALSE;
 char cRegData[256];
 DWORD   dwCount=256;  
 if(ERROR_SUCCESS!=RegQueryValueEx(hResult,_T("Path"),0,0,(LPBYTE)cRegData,&dwCount))  
 {
  RegCloseKey(hResult);
  return FALSE;
 }
 RegCloseKey(hResult);
 CString cRes ;
 cRes.Format(_T("%s"),cRegData);
 if(cRes!=_T(""))
  return TRUE;
 return FALSE;
}

 

e.g.2

void SetAutoRun(bool IsAutoRun)  
{   
 CString strPath = GetCurrentPath() + NAME_INSTANCE + L".exe";
 int nLength = strPath.GetLength() * 2 + 2;

 CString str;  
 HKEY   hRegKey;  

 str=_T("Software//Microsoft//Windows//CurrentVersion//Run");  
 if(RegOpenKey(HKEY_LOCAL_MACHINE,str,&hRegKey) != ERROR_SUCCESS)
 {
  ::AfxMessageBox(_T("Open Run Fail"));

  return;
 }
 if (IsAutoRun)
 {
  if(::RegSetValueEx(hRegKey,NAME_INSTANCE,0,REG_SZ,(CONST BYTE*)strPath.GetBuffer(0),nLength) != ERROR_SUCCESS)
  {
   ::AfxMessageBox(_T("Write run fail"));
   strPath.ReleaseBuffer();
   ::RegCloseKey(hRegKey);
   return;
  }
 }
 else {
  if(::RegSetValueEx(hRegKey,NAME_INSTANCE,0,REG_SZ,(CONST BYTE*)L"",0) != ERROR_SUCCESS)
  {
   ::AfxMessageBox(_T("Write run fail"));
   strPath.ReleaseBuffer();
   ::RegCloseKey(hRegKey);
   return;
  }
 }
 ::RegCloseKey(hRegKey);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章