1. 程式人生 > >MFC登錄檔操作

MFC登錄檔操作

http://blog.csdn.net/weiwenhp/article/details/9381717

登錄檔簡介

有時程式中要存些設定資訊,一個方法就是建立一些普通的txt或xml檔案,然後儲存進去就行了.另一辦法就是儲存到登錄檔裡.登錄檔是由windows維護的一個小資料庫.裡面也會儲存windows本身的很多配置資訊.

我們在命令列通過regedit可以手動開啟登錄檔檢視相關資訊.在頁面上我們會看到左邊有很多樹形結構的內容,我們可以簡單的把它等同於目錄.最頂端的5個根鍵所包括的內容分別是

1.)HKEY_CLASSES_ROOT

定義了系統中所有檔案型別標誌和基本操作標誌.

 2.)HKEY_CURRENT_USER

當前使用者的配置資訊,包括環境變數、桌面設定、網路連線,軟體執行資訊等

 3.)HKEY_LOCAL_MACHINE

本機相關的系統資訊,包括硬體資訊,驅動資訊,記憶體資料,匯流排資料等等。

4.) HKEY_USER

這裡記錄了本機器上所有使用者的設定

5.)KKEY_CURRENT_CONFIG

包括字型、BIOS、作業系統、印表機等四項的配置資訊。該欄位是HKEY_LOCAL_MACHINE\Config的副本

其中1,4,5,項根鍵我們一般只是讀取一些資訊.而2,3兩項根鍵下就會寫入一些應用程式自己的配置資訊.所以用的最多的是這兩個位置

HKEY_CURRENT_USER \ SOFTWARE

HKEY_LOCAL_MACHINE \ SOFTWARE

應用程式配置資訊一般儲存在哪裡

剛說了我們一般在HKEY_LOCAL_MACHINE,HKEY_CURRENT_USER這兩個下面放自己應用程式的配置資訊.那這兩者有啥區別呢?

放在HKEY_CURRENT_USER中的資訊只有當前使用者能看到,如果log off換個使用者就不到了.而放HKEY_LOCAL_MACHINE下面的資訊所有使用者都能看到.

不過我們平時自己一個人用的電腦基本上也不會去整多個使用者登陸.這時配置資訊隨便放哪在我們看來貌似一樣的.

不過開啟登錄檔一看我們發現平時用的大部分軟體都是把配置資訊放HKEY_CURRENT_USER\ SOFTWARE

下.

當然如果你想寫些其他資訊不想被別人很容易找到的,可以找個啥偏點的地方藏起來啊.

登錄檔鍵值內容

我們看到的那一層層樹形結構,就像一個個目錄一樣,它本身就是起組織內容的作用.而我們真正需要的資訊是在目錄的最後一層.開啟後我們會在右邊看到三列

Name , Type , Data 其中的Type只是起描述作用,幫助你理解.所以真正用到的是Name , Data看到兩個值想到MFC中的CMap類了吧,name就是鍵名,data是鍵值.

我猜windows儲存登錄檔裡的資訊時就用CMap這樣的型別的.

這裡的Type我們也可以看成程式語言中的資料型別,Name就是變數名,Data是變數的值.登錄檔裡常用的型別是REG_SZ,可以簡單的看成是個字串像Char* 或者CString這樣的.

另一個是REG_DWORD,這儲存的是數值,就可以看成DWORD (unsigned long)

MFC中操作登錄檔主要是CRegKey這個類.

CRegKey的用法

建立函式

有點類似於建立一個目錄供往裡面寫檔案一樣.

CRegKey key;

key.Create(HKEY_CURRENT_USER, _T("SOFTWARE\\ArwenSoft"));

key.Close();

開啟並新增值

int iMaxNumber = 100;

BOOL bOpenReg = key.Open(HKEY_CURRENT_USER, _T("SOFTWARE\\ArwenSoft"));

//實際上我們有時真需要把密碼儲存到登錄檔時可不能明碼儲存,先得把密碼加密後再儲存,讀取時再解密.

key.SetStringValue(_T("Password"), _T("123"));

key.SetDWORDValue(_T("count"),iMaxNumber);

key.Close();

檢視登錄檔資訊

DWORD dwNum;

BOOL bOpenReg = key.Open(HKEY_CURRENT_USER, _T("SOFTWARE\\ArwenSoft"));

key.QueryDWORDValue(_T("count"),dwNum); //或者key.QueryValue(dwNum,_T("count"));

刪除資訊

key.DeleteValue(_T("count"));

MFC操作登錄檔便捷方式

除了使用CRegKey類直接操作登錄檔,MFC框架還提供了個便捷的方式.

MFC的入口點,繼承自CWinApp的那個類中有個InitInstance函式.我們新建一個project時,該函式預設生成這樣一行程式碼

SetRegistryKey(_T("Local AppWizard-Generated Applications"));

這裡就是在HKEY_CURRENT_USER \ SOFTWARE 下面新建一個項.你可以把名字改成其他任意值.比如註釋掉上面那行程式碼,改成這樣

SetRegistryKey(_T("ArwenProduct"));

在這裡這樣設定後,以後檢視或往登錄檔新增資訊就非常簡單了.

往登錄檔寫資訊就是

WriteProfileString(_T("Settings"),_T("Password"),_T("123")); //寫入字串值

WriteProfileInt(_T("settings"),_T("count"),123); //寫入數字

其中第一個引數相當於在前面的ArwenProduct下面再生成新的項,.然後第二個引數是值名,第三個是鍵值.當然如果你還想多幾層項,可以樣

WriteProfileString(_T("ConfigInfo\\Settings"),_T("Password"),_T("123")); //寫入字串值

讀取登錄檔資訊

CString strPwd = GetProfileString(_T("settings"),_T("pwd"));

int num = GetProfileInt(_T("settings"),_T("count"));

不過這些函式是CWinApp的成員函式.在其他地方用,得這樣

AfxGetApp()->GetProfileString

AfxGetApp()可以得CWinApp的指標