Windows API一日一練(64) RegSetValueEx和RegDeleteValue函數

來源:互聯網
上載者:User
  Windows API一日一練(64) RegSetValueEx和RegDeleteValue函數

上一次說到怎麼建立註冊表的鍵,但接著下來的問題就是怎麼樣儲存資料到註冊表裡。註冊表使用樹形的方式管理資料,所以它的擴充和訪問都是比較靈活的。不過註冊表是系統重要訊息庫,每當Windows系統載入時,都首先從硬碟裡讀取它出來,才知道每台電腦所有硬體設定資訊,然後再載入不同的驅動程式。因此,註冊表作為系統重要的檔案,不要往裡面寫超過2K的資料大小,這樣可以提高系統的速度。下面就來介紹一下怎麼樣儲存一個字串的索引值。它需要使用RegSetValueEx函數來設定索引值和使用RegDeleteValue函數來刪除原來的索引值。

函數RegSetValueEx和RegDeleteValue聲明如下:

WINADVAPI
LONG
APIENTRY
RegSetValueExA (
    __in HKEY hKey,
    __in_opt LPCSTR lpValueName,
    __reserved DWORD Reserved,
    __in DWORD dwType,
    __in_bcount_opt(cbData) CONST BYTE* lpData,
    __in DWORD cbData
    );
WINADVAPI
LONG
APIENTRY
RegSetValueExW (
    __in HKEY hKey,
    __in_opt LPCWSTR lpValueName,
    __reserved DWORD Reserved,
    __in DWORD dwType,
    __in_bcount_opt(cbData) CONST BYTE* lpData,
    __in DWORD cbData
    );
#ifdef UNICODE
#define RegSetValueEx RegSetValueExW
#else
#define RegSetValueEx RegSetValueExA
#endif // !UNICODE

WINADVAPI
LONG
APIENTRY
RegDeleteValueA (
    __in HKEY hKey,
    __in_opt LPCSTR lpValueName
    );
WINADVAPI
LONG
APIENTRY
RegDeleteValueW (
    __in HKEY hKey,
    __in_opt LPCWSTR lpValueName
    );
#ifdef UNICODE
#define RegDeleteValue RegDeleteValueW
#else
#define RegDeleteValue RegDeleteValueA
#endif // !UNICODE

hKey是主鍵。
lpValueName是鍵名稱。
dwType是索引值類型。
lpData是鍵的資料。
cbData是索引值的大小。

調用函數的例子如下:
#001  //打註冊表。HKEY_CURRENT_USER/"Software"/"Wincpp"/"testreg"
#002  // /"Windows"//"winsize" = "800*600"
#003  //蔡軍生 2007/11/04 QQ:9073204 深圳
#004  BOOL WriteProfileString(LPCTSTR lpszSection, LPCTSTR lpszEntry,
#005        LPCTSTR lpszValue)
#006  {
#007        //
#008        LONG lResult;
#009        if (lpszEntry == NULL) //刪除整鍵。
#010        {
#011              HKEY hAppKey = GetAppRegistryKey();
#012              if (hAppKey == NULL)
#013              {
#014                    return FALSE;
#015              }   
#016
#017              lResult = ::RegDeleteKey(hAppKey, lpszSection);
#018              RegCloseKey(hAppKey);
#019        }
#020        else if (lpszValue == NULL)
#021        {
#022              //刪除索引值。
#023              HKEY hAppKey = GetAppRegistryKey();
#024              if (hAppKey == NULL)
#025              {
#026                    return FALSE;
#027              }   
#028
#029              HKEY hSecKey = NULL;
#030              DWORD dw;
#031              RegCreateKeyEx(hAppKey, lpszSection, 0, REG_NONE,
#032                    REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
#033                    &hSecKey, &dw);
#034              RegCloseKey(hAppKey);
#035
#036              if (hSecKey == NULL)
#037              {
#038                    return FALSE;
#039              }   
#040
#041              //
#042              lResult = ::RegDeleteValue(hSecKey, (LPTSTR)lpszEntry);
#043              RegCloseKey(hSecKey);
#044        }
#045        else
#046        {
#047              //設定索引值。
#048              HKEY hAppKey = GetAppRegistryKey();
#049              if (hAppKey == NULL)
#050              {
#051                    return FALSE;
#052              }   
#053
#054              HKEY hSecKey = NULL;
#055              DWORD dw;
#056              //建立子鍵。
#057              RegCreateKeyEx(hAppKey, lpszSection, 0, REG_NONE,
#058                    REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
#059                    &hSecKey, &dw);
#060              RegCloseKey(hAppKey);
#061
#062              if (hSecKey == NULL)
#063              {
#064                    return FALSE;
#065              }   
#066
#067              //設定子鍵中的項值。
#068              lResult = RegSetValueEx(hSecKey, lpszEntry, NULL, REG_SZ,
#069                  (LPBYTE)lpszValue, (lstrlen(lpszValue)+1)*sizeof(TCHAR));
#070              RegCloseKey(hSecKey);
#071        }
#072        return lResult == ERROR_SUCCESS;
#073
#074  }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.