轉載自: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的指針
