註冊表操做函數封裝,並實現開機自啓動、電腦安裝程序信息獲取、開機提示界面設置功能

  1 #ifndef BCL_REGEDIT_H
  2 #define BCL_REGEDIT_H
  3 
  4 #if defined(BCL_EXPORT)
  5 #define BCL_API extern "C" __declspec(dllexport)
  6 #else
  7 #define BCL_API extern "C" __declspec(dllimport)
  8 #endif
  9 #ifndef CALLBACK
 10 #define CALLBACK __stdcall
 11 #endif
 12 #include <string>
 13 #include <list>
 14 #include <windows.h>
 15 #define BCL_SMALL_BUFFER_LEN  256
 16 using namespace std;
 17 
 18 struct ProgramInfo
 19 {
 20     string PiName;//名稱
 21     string PiPath;//路徑
 22     string PiPublisher;//發佈者
 23     string PiVersion;//版本
 24     string PiUninstall;//卸載
 25     string PiInstallTime;//安裝時間
 26     int   PiSize;//大小
 27     ProgramInfo()
 28     {
 29         PiName="";
 30         PiPath="";
 31         PiPublisher="";
 32         PiVersion="";
 33         PiUninstall="";
 34         PiInstallTime="";
 35         PiSize=0;
 36     }
 37 
 38 };
 39 
 40 /****************
 41 功能:向註冊表的某個鍵中添加一個鍵值項
 42 參數:
 43 HKEY hRootKey             in    根鍵名稱
 44 string strKeyItermPath,     in    鍵值項路徑或名稱
 45 string strKeyItermNane,    in    鍵值項名稱
 46 DWORD nItermType       in    鍵值的類型
 47 void* cItermValue ,          in     鍵值的值
 48 DWORD nItermValueLen            in     鍵值長度
 49 返回值:0成功,>0 失敗
 50 *****************/
 51 BCL_API int CALLBACK BCL_RegAddKeyIterm(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane,DWORD nItermType,void* cItermValue ,DWORD nItermValueLen);
 52 /****************
 53 功能:刪除註冊表的某個鍵的鍵值項
 54 參數:
 55 HKEY hRootKey             in    根鍵名稱
 56 string strKeyItermPath,     in    鍵值項路徑或名稱,爲空時,表示當前目錄
 57 string strKeyItermNane,    in    鍵值項名稱
 58 返回值:0成功,>0 失敗
 59 *****************/
 60 BCL_API int CALLBACK BCL_RegDeleteKeyIterm(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane);
 61 /****************
 62 功能:設置註冊表的某個鍵的鍵值項
 63 參數:
 64 HKEY hRootKey             in    根鍵名稱
 65 string strKeyItermPath,     in    鍵值項路徑或名稱,爲空時,表示當前目錄
 66 string strKeyItermNane,    in    鍵值項名稱
 67 DWORD nItermType       in    鍵值的類型
 68 void* cItermValue ,          in     鍵值的值
 69 DWORD nItermValueLen  in     鍵值長度
 70 返回值:0成功,>0 失敗
 71 *****************/
 72 BCL_API int CALLBACK BCL_RegSetKeyIterm(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane,DWORD nItermType,void* cItermValue ,DWORD nItermValueLen);
 73 /****************
 74 功能:獲取註冊表的某個鍵的鍵值項
 75 參數:
 76 HKEY hRootKey             in    根鍵名稱
 77 string strKeyItermPath,     in    鍵值項路徑或名稱,爲空時,表示當前目錄
 78 string strKeyItermNane,    in    鍵值項名稱
 79 DWORD nItermType       out    鍵值的類型
 80 void* cItermValue ,        out     鍵值的值
 81 DWORD* nItermValueLen  out     傳入鍵值緩衝區的長度,傳出鍵值的長度
 82 返回值:0成功,>0 失敗
 83 *****************/
 84 BCL_API int CALLBACK BCL_RegGetKeyIterm(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane,DWORD* nItermType,void* cItermValue ,DWORD* nItermValueLen);
 85 
 86 /****************
 87 功能:獲取字符串類型REG_SZ的鍵值項
 88 參數:
 89 HKEY hRootKey             in    根鍵名稱
 90 string strKeyItermPath,     in    鍵值項路徑或名稱,爲空表示當前路徑
 91 string strKeyItermNane,    in    鍵值項名稱
 92 ,string& strItermValue              out  string類型的值
 93 返回值:0成功,>0 失敗
 94 *****************/
 95 BCL_API int CALLBACK BCL_RegGetKeyItermSZ(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane,string& strItermValue);
 96 
 97 /****************
 98 功能:獲取字符串類型REG_SZ的鍵值項
 99 參數:
100 HKEY hRootKey             in    根鍵名稱
101 string strKeyItermPath,     in    鍵值項路徑或名稱,爲空表示當前路徑
102 string strKeyItermNane,    in    鍵值項名稱
103 ,DWORD* pdwItermValue       out  DWORD類型的值
104 返回值:0成功,!=0失敗
105 *****************/
106 BCL_API int CALLBACK BCL_RegGetKeyItermDWORD(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane,DWORD* pdwItermValue);
107 
108 /****************
109 功能:向註冊表添加一個鍵,已有鍵打開
110 參數:
111 HKEY hRootKey             in    根鍵名稱
112 string strKeyPath,     in    鍵路徑或名稱,爲空時,表示當前目錄
113 HKEY& hKey         out  添加的鍵句柄
114 DWORD*  lpNewOrOpen  out   1新建 2打開已有鍵
115 返回值:0成功,-1失敗
116 *****************/
117 BCL_API int CALLBACK BCL_RegAddKey(HKEY hRootKey,string strKeyPath,HKEY* hKey,DWORD*  lpNewOrOpen);
118 /****************
119 功能:刪除某個鍵下的子健和鍵值項,遞歸刪除
120 參數:
121 HKEY hRootKey             in    根鍵名稱
122 string strKeyPath,     in    鍵值項路徑或名稱,爲空時,表示當前目錄
123 返回值:0成功,>0 失敗
124 *****************/
125 
126 BCL_API int CALLBACK BCL_RegDeleteKey(HKEY hRootKey,string strKeyPath);
127 /****************
128 功能:打開某個鍵,返回句柄
129 參數:
130 HKEY hRootKey             in    根鍵或者
131 string strKeyPath,     in    鍵值項路徑或名稱,,爲空時,表示當前目錄
132 HKEY* hOpenKey  out  返回的鍵句柄
133 返回值:0成功,>0 失敗
134 *****************/
135 BCL_API int CALLBACK BCL_RegOpenKey(HKEY hRootKey,string strKeyPath,HKEY* hOpenKey);
136 
137 /****************
138 功能:關閉某個鍵,返回句柄
139 參數:
140 HKEY hRootKey             in    根鍵名稱
141 string strKeyPath,     in    鍵值項路徑或名稱,爲空時,表示當前目錄
142 HKEY& hKey  out  返回的鍵句柄
143 返回值:0成功,>0 失敗
144 *****************/
145 BCL_API int CALLBACK BCL_RegCloseKey(HKEY& hKey);
146 /****************
147 功能:輪詢一個鍵的子健
148 參數:
149 HKEY hRootKey,   in   主鍵或者鍵
150 string strKeyPath   in  子健路徑或名稱,若是爲空,則hRootKey爲當前子健
151 DWORD dwIndex   in  查詢的鍵的索引,從0開始,沒有的則返回ERROR_NO_MORE_ITEMS
152 DWORD*  dwKeyNameLen
153 返回值:0成功,>0錯誤碼
154 *****************/
155 BCL_API int CALLBACK BCL_RegEnumKey(HKEY hRootKey,string strKeyPath,DWORD dwIndex,string& strKeyName,DWORD*  dwKeyNameLen);
156 /****************
157 功能:輪詢一個鍵的鍵值
158 參數:
159 HKEY hRootKey,   in   主鍵或者鍵
160 string strKeyPath   in  子健路徑或名稱,若是爲空,則hRootKey爲當前子健
161 DWORD dwIndex   in  查詢的鍵的索引,從0開始,沒有的則返回ERROR_NO_MORE_ITEMS
162 DWORD*  dwKeyNameLen
163 返回值:0成功,>0錯誤碼
164 *****************/
165 BCL_API int CALLBACK BCL_RegEnumKeyIterm(HKEY hRootKey,string strKeyPath,DWORD dwIndex,string& strItermName,DWORD* dwItermType,LPBYTE bItermValue,DWORD* dwItermValueLen);
166 
167 /****************
168 功能:保存一個鍵下的子健和鍵值信息到文件
169 參數:
170 HKEY hRootKey,   in   主鍵或者鍵
171 string strKeyPath   in  子健路徑或名稱,若是爲空,則hRootKey爲當前子健
172 string strFilePath  in  保存文件的名稱包含路徑
173 返回值:0成功,>0錯誤碼
174 *****************/
175 BCL_API int CALLBACK BCL_RegSaveKeyInfoToFile(HKEY hRootKey,string strKeyPath,string strFilePath);
176 /****************
177 功能:將一個文件的信息導入到一個鍵下
178 參數:
179 HKEY hRootKey,   in   主鍵或者鍵
180 string strKeyPath   in  子健路徑或名稱,若是爲空,則hRootKey爲當前子健
181 string strFilePath  in  保存文件的名稱包含路徑
182 返回值:0成功,>0錯誤碼
183 *****************/
184 BCL_API int CALLBACK BCL_RegLoadKeyInfoFromFile(HKEY hRootKey,string strKeyPath,string strFilePath);
185 
186 /****************
187 功能:查詢一個鍵的子健個數和子健名稱最大長度,鍵值個數
188 參數:
189 HKEY hRootKey,   in   主鍵或者鍵
190 string strKeyPath   in  子健路徑或名稱,若是爲空,則hRootKey爲當前子健
191 DWORD* dwsubKeyNum,  out  子健數量
192 DWORD* dwMaxKeyNameLen,  out  子健名稱最大長度
193 DWORD*  dwItermNum,       out 鍵值數量
194 DWORD*  dwMaxItermNameLen   out  鍵值名稱最大長度
195 DWORD*  dwMaxItermValueLen   out  鍵值最大長度
196 返回值:0成功,>0錯誤碼
197 *****************/
198 BCL_API int CALLBACK BCL_RegQueryKeyInfo(HKEY hRootKey,string strKeyPath,DWORD* dwsubKeyNum,DWORD* dwMaxKeyNameLen,DWORD*  dwItermNum,DWORD*  dwMaxItermNameLen,DWORD*  dwMaxItermValueLen);
199 /****************
200 功能:添加一個程序到開機自啓動菜單
201 參數:
202 string strProgramName ,程序名稱
203 string strKeyPath  程序路徑或名稱,爲空時,表示當前目錄
204 返回值:0成功,>0 失敗
205 *****************/
206 
207 BCL_API int CALLBACK BCL_RegAddProgramToAutoStartManu(string strProgramName ,string strProgramPath);
208 /****************
209 功能:刪除一個程序到開機自啓動菜單
210 參數:
211 string strProgramName ,程序名稱
212 返回值:0成功,-1失敗
213 *****************/
214 BCL_API int CALLBACK BCL_RegDeleteProgramFromAutoStartManu(string strProgramName);
215 /****************
216 功能:從註冊表中獲取安裝程序的信息
217 參數:
218 list<ProgramInfo>&  listProgramInfo,程序名稱
219 返回值:0成功,>0 失敗
220 *****************/
221 BCL_API int CALLBACK BCL_RegGetProgramsInfo(list<ProgramInfo>&  listProgramInfo);
222 
223 /****************
224 功能:添加開機啓動時顯示的提示信息
225 參數:
226 string strTitle,  in 標題
227 string strContent   in 內容
228 返回值:0成功,>0 失敗
229 *****************/
230 BCL_API int CALLBACK BCL_RegAddTipTitleAndContent(string strTitle,string strContent);
231 /****************
232 功能:刪除開機啓動時顯示的提示信息
233 參數:
234 
235 返回值:0成功,>0 失敗
236 *****************/
237 BCL_API int CALLBACK BCL_RegRemoveTipTitleAndContent();
238 
239 
240 #endif
BCL_Regedit.h
  1 // BCL_Regedit.cpp : 定義 DLL 應用程序的導出函數。
  2 //
  3 
  4 #include "stdafx.h"
  5 #define BCL_EXPORT
  6 #include "BCL_Regedit.h"
  7 
  8 
  9 #include "stdafx.h"
 10 #include <iostream>
 11 #include <windows.h>
 12 #include <string>
 13 
 14 //// wchar_t to string
 15 //std::string WCharToString(LPCWSTR pwszSrc)
 16 //{
 17 //    int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL); 
 18 //    if (nLen<= 0) return std::string("");
 19 //    char* pszDst = new char[nLen];
 20 //    if (NULL == pszDst) return std::string("");
 21 //    WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
 22 //    pszDst[nLen -1] = 0;
 23 //    std::string strTemp(pszDst);
 24 //    delete [] pszDst;
 25 //    return strTemp;
 26 //}
 27 //// string to wstring
 28 //int StringToWstring(wchar_t* szDst, int bufflen ,std::string str)
 29 //{
 30 //    std::string temp = str;
 31 //    int len=MultiByteToWideChar(CP_ACP, 0, (LPCSTR)temp.c_str(), -1, NULL,0); 
 32 //    if (len>bufflen)
 33 //    {
 34 //        return 0;
 35 //    }
 36 //    MultiByteToWideChar(CP_ACP, 0, (LPCSTR)temp.c_str(), -1,szDst, len);
 37 //    return len;
 38 //}
 39 
 40 
 41 
 42 
 43 BCL_API int CALLBACK BCL_RegAddKeyIterm(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane,DWORD nItermType,void* cItermValue ,DWORD nItermValueLen)
 44 {
 45 
 46     if (cItermValue==NULL||nItermValueLen<=0||nItermType<0||nItermType>11)
 47     {
 48         return -1;
 49     }
 50     HKEY hSubKey;
 51     int nReval=-1;
 52     if (strKeyItermPath=="")
 53     {
 54         hSubKey=hRootKey;
 55     }
 56     else
 57     {
 58         nReval=RegOpenKeyEx(hRootKey,LPCTSTR(strKeyItermPath.c_str()),0,KEY_ALL_ACCESS,&hSubKey);
 59         if (nReval!=ERROR_SUCCESS)
 60         {
 61             return nReval;
 62         }
 63     }
 64     if (nItermType==REG_SZ||nItermType==REG_EXPAND_SZ||nItermType==REG_MULTI_SZ)
 65     {
 66         nItermValueLen=nItermValueLen+1;//字符串類型的必須加上結束符
 67     }
 68     nReval=RegSetValueEx(hSubKey,LPCTSTR(strKeyItermNane.c_str()),0,nItermType,(BYTE *)cItermValue,nItermValueLen);
 69     //RegCloseKey(hSubKey);
 70     return nReval;
 71 }
 72 
 73 BCL_API int CALLBACK BCL_RegDeleteKeyIterm(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane)
 74 {
 75     int nReval=-1;
 76     if (strKeyItermPath=="")
 77     {
 78         return RegDeleteValue(hRootKey,LPCTSTR (strKeyItermNane.c_str()));
 79     }
 80     else
 81     {
 82         return RegDeleteKeyValue(hRootKey,LPCTSTR(strKeyItermPath.c_str()),LPCTSTR (strKeyItermNane.c_str()));    
 83     }
 84 }
 85 
 86 
 87 BCL_API int CALLBACK BCL_RegSetKeyIterm(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane,DWORD nItermType,void* cItermValue ,DWORD nItermValueLen)
 88 {
 89     int nReval;
 90     if (cItermValue==NULL||nItermValueLen<=0||nItermType<0||nItermType>11)
 91     {
 92         return -1;
 93     }
 94     if (strKeyItermPath=="")
 95     {
 96         nReval=RegSetValueEx(hRootKey,LPCTSTR(strKeyItermNane.c_str()),0,nItermType,(BYTE *)cItermValue,nItermValueLen);
 97     }
 98     else
 99     {
100         nReval=RegSetKeyValue(hRootKey,LPCTSTR(strKeyItermPath.c_str()),LPCSTR(strKeyItermNane.c_str()),nItermType,LPCVOID(cItermValue),nItermValueLen);
101     }
102     return nReval;
103 }
104 BCL_API int CALLBACK BCL_RegGetKeyIterm(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane,DWORD* nItermType,void* cItermValue ,DWORD* nItermValueLen)
105 {
106     long nReval=-1;
107     if (cItermValue==NULL)
108     {
109         return nReval;
110     }
111     DWORD far dwRelen=0;//
112     if (strKeyItermPath=="")
113     {
114         nReval=RegQueryValueEx(hRootKey,LPCSTR(strKeyItermNane.c_str()),NULL,nItermType,(LPBYTE)cItermValue,&dwRelen);
115     } 
116     else
117     {
118         nReval=RegGetValue(hRootKey,LPCSTR(strKeyItermPath.c_str()),LPCSTR(strKeyItermNane.c_str()),RRF_RT_ANY,nItermType,cItermValue,&dwRelen);
119         if (nReval==ERROR_SUCCESS||dwRelen<=*nItermValueLen)
120         {
121             *nItermValueLen=dwRelen;
122             return 0;
123         }
124     }
125     return nReval;
126 }
127 BCL_API int CALLBACK BCL_RegGetKeyItermSZ(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane,string& strItermValue)
128 {
129     long nReval=-1;
130     DWORD nItermType=REG_SZ;
131     DWORD nItermValueLen=512;
132     if (strKeyItermPath=="")
133     {
134         nReval=RegQueryValueEx(hRootKey,LPCSTR(strKeyItermNane.c_str()),NULL,&nItermType,(LPBYTE)(strItermValue.c_str()),&nItermValueLen);
135     } 
136     else
137     {
138         nReval=RegGetValue(hRootKey,LPCSTR(strKeyItermPath.c_str()),LPCSTR(strKeyItermNane.c_str()),RRF_RT_ANY,&nItermType,PVOID(strItermValue.c_str()),&nItermValueLen);
139     }
140     return nReval;
141 }
142 BCL_API int CALLBACK BCL_RegGetKeyItermDWORD(HKEY hRootKey,string strKeyItermPath,string strKeyItermNane,DWORD* pdwItermValue)
143 {
144     if (pdwItermValue==NULL)
145     {
146         return -1;
147     }
148     long nReval=-1;
149     DWORD nItermType=REG_DWORD;
150     DWORD nItermValueLen=sizeof(DWORD);
151     if (strKeyItermPath=="")
152     {
153         nReval=RegQueryValueEx(hRootKey,LPCSTR(strKeyItermNane.c_str()),NULL,&nItermType,(LPBYTE)(pdwItermValue),&nItermValueLen);
154     } 
155     else
156     {
157         nReval=RegGetValue(hRootKey,LPCSTR(strKeyItermPath.c_str()),LPCSTR(strKeyItermNane.c_str()),RRF_RT_ANY,&nItermType,PVOID(pdwItermValue),&nItermValueLen);
158     }
159     return nReval;
160 }
161 BCL_API int CALLBACK BCL_RegAddKey(HKEY hRootKey,string strKeyPath,HKEY* hKey ,DWORD*  lpNewOrOpen)
162 {
163     return RegCreateKeyEx(hRootKey,LPCSTR(strKeyPath.c_str()),0,NULL,0,KEY_ALL_ACCESS,NULL,hKey,lpNewOrOpen);
164 }
165 BCL_API int CALLBACK BCL_RegDeleteKey(HKEY hRootKey,string strKeyPath)
166 {
167     if(strKeyPath=="")
168     {
169         return RegDeleteTree(hRootKey,NULL);
170     }
171     return RegDeleteTree(hRootKey,LPCSTR(strKeyPath.c_str()));
172 }
173 
174 
175 BCL_API int CALLBACK BCL_RegOpenKey(HKEY hRootKey,string strKeyPath,HKEY* hOpenKey)
176 {
177     return RegOpenKeyEx(hRootKey,LPCSTR(strKeyPath.c_str()),0,KEY_ALL_ACCESS,hOpenKey);
178 }
179 
180 BCL_API int CALLBACK BCL_RegCloseKey(HKEY& hKey)
181 {
182     return RegCloseKey(hKey);
183 }
184 BCL_API int CALLBACK BCL_RegEnumKey(HKEY hRootKey,string strKeyPath,DWORD dwIndex,string& strKeyName,DWORD*  dwKeyNameLen)
185 {
186     long lResult=-1;
187     HKEY hSubKey;
188     if (strKeyPath!="")
189     {
190         lResult=BCL_RegOpenKey(hRootKey,strKeyPath,&hSubKey);
191         if (lResult!=ERROR_SUCCESS)
192         {
193             return lResult;
194         }
195     }
196     else
197     {
198         hSubKey=hRootKey;
199     }
200     lResult=RegEnumKeyEx(hSubKey,dwIndex,LPSTR(strKeyName.c_str()),dwKeyNameLen,0,NULL,NULL,NULL);
201     if (strKeyPath!="")
202     {
203         BCL_RegCloseKey(hSubKey);
204     }
205     return lResult;
206 }
207 
208 BCL_API int CALLBACK BCL_RegEnumKeyIterm(HKEY hRootKey,string strKeyPath,DWORD dwIndex,string& strItermName,DWORD* dwItermType,LPBYTE bItermValue,DWORD* dwItermValueLen)
209 {
210     long lResult=-1;
211     HKEY hSubKey;
212     if (strKeyPath!="")
213     {
214         lResult=BCL_RegOpenKey(hRootKey,strKeyPath,&hSubKey);
215         if (lResult!=ERROR_SUCCESS)
216         {
217             return lResult;
218         }
219     }
220     else
221     {
222         hSubKey=hRootKey;
223     }
224     lResult=RegEnumValue(hSubKey,dwIndex,LPSTR(strItermName.c_str()),NULL,NULL,dwItermType,bItermValue,dwItermValueLen);
225     if (strKeyPath!="")
226     {
227         BCL_RegCloseKey(hSubKey);
228     }
229     return lResult;
230 }
231 BCL_API int CALLBACK BCL_RegQueryKeyInfo(HKEY hRootKey,string strKeyPath,DWORD* dwsubKeyNum,DWORD* dwMaxKeyNameLen,DWORD*  dwItermNum,DWORD*  dwMaxItermNameLen,DWORD*  dwMaxItermValueLen)
232 {
233     long lResult=-1;
234     HKEY hSubKey;
235     if (strKeyPath!="")
236     {
237         lResult=BCL_RegOpenKey(hRootKey,strKeyPath,&hSubKey);
238         if (lResult!=ERROR_SUCCESS)
239         {
240             return lResult;
241         }
242     }
243     else
244     {
245         hSubKey=hRootKey;
246     }
247     lResult=RegQueryInfoKey(hSubKey,NULL,NULL,NULL,dwsubKeyNum,dwMaxKeyNameLen,NULL,dwItermNum,dwMaxItermNameLen, dwMaxItermValueLen,NULL,NULL);
248     if (strKeyPath!="")
249     {
250         BCL_RegCloseKey(hSubKey);
251     }
252     return lResult;
253 
254 }
255 BCL_API int CALLBACK BCL_RegSaveKeyInfoToFile(HKEY hRootKey,string strKeyPath,string strFilePath)
256 {
257     if (strKeyPath=="")
258     {
259         return RegSaveKeyEx(hRootKey,strFilePath.c_str(),NULL,REG_LATEST_FORMAT);
260     }
261     else
262     {
263         HKEY subkey;
264         int lResult=BCL_RegOpenKey(hRootKey,strKeyPath,&subkey);
265         if (lResult!=ERROR_SUCCESS)
266         {
267             return lResult;
268         }
269         lResult=RegSaveKeyEx(subkey,strFilePath.c_str(),NULL,REG_LATEST_FORMAT);
270         RegCloseKey(subkey);
271         return lResult;
272     }
273 }
274 BCL_API int CALLBACK BCL_RegLoadKeyInfoFromFile(HKEY hRootKey,string strKeyPath,string strFilePath)
275 {
276     if (strKeyPath=="")
277     {
278         return RegLoadKey(hRootKey,strFilePath.c_str(),NULL,REG_LATEST_FORMAT);
279     }
280     else
281     {
282         HKEY subkey;
283         int lResult=BCL_RegOpenKey(hRootKey,strKeyPath,&subkey);
284         if (lResult!=ERROR_SUCCESS)
285         {
286             return lResult;
287         }
288         lResult=RegSaveKeyEx(subkey,strFilePath.c_str(),NULL,REG_LATEST_FORMAT);
289         RegCloseKey(subkey);
290         return lResult;
291     }
292 }
293 BCL_API int CALLBACK BCL_RegAddProgramToAutoStartManu(string strProgramName ,string strProgramPath)
294 {
295     int lResult =-1;
296     DWORD nPathLen = sizeof(strProgramPath)*2; 
297     lResult=BCL_RegAddKeyIterm(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",strProgramName,REG_SZ,(void *)strProgramPath.c_str(),nPathLen);
298     return lResult;
299 }
300 BCL_API int CALLBACK BCL_RegDeleteProgramFromAutoStartManu(string strProgramName)
301 {
302     return BCL_RegDeleteKeyIterm(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",strProgramName);
303 }
304 
305 BCL_API int CALLBACK BCL_RegGetProgramsInfo(list<ProgramInfo>&  listProgramInfo)
306 {
307     HKEY hSubKey;
308     DWORD dwIndex = 0;
309     long lResult;
310     string location;
311     //SYSTEM_INFO si; 
312     //GetNativeSystemInfo(&si); 
313     //if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
314     //    si.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_IA64 ) 
315     //{ 
316     //    //64 位操做系統 
317     //    location="SoftWare\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
318     //} 
319     //else
320     //{ 
321     //    // 32 位操做系統 
322     //    location="SoftWare\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
323     //}
324     lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SoftWare\\Microsoft\\Windows\\CurrentVersion\\Uninstall"), 0, KEY_ALL_ACCESS, &hSubKey);        // 打開註冊表Uninstall鍵
325     if(ERROR_SUCCESS == lResult) 
326     {
327         DWORD typeSZ = REG_SZ;            // SZ 註冊表類型
328         DWORD typeDWORD = REG_DWORD;    // DWORD 註冊表類型
329 
330         char s_keyName[BCL_SMALL_BUFFER_LEN] = {0}; 
331         DWORD cbkeyNamelen =BCL_SMALL_BUFFER_LEN;    
332         char s_itermName[BCL_SMALL_BUFFER_LEN]={0};
333         DWORD cbItermNameLen=BCL_SMALL_BUFFER_LEN;
334         DWORD s_EstimatedSize;                    // 大小
335         DWORD cbDWsize =BCL_SMALL_BUFFER_LEN; 
336 
337         lResult = RegEnumKeyEx(hSubKey, dwIndex, s_keyName, &cbkeyNamelen, 0, NULL, NULL, NULL);        // 獲取字段
338         while (lResult == ERROR_SUCCESS && lResult != ERROR_MORE_DATA)
339         {    
340             ProgramInfo infos;
341             HKEY hItem;        // 下一級註冊表句柄
342             if(::RegOpenKeyEx(hSubKey, s_keyName, 0, KEY_ALL_ACCESS, &hItem) == ERROR_SUCCESS)
343             {        // 提取下一級註冊表程序的屬性信息
344                 int irrel=-1;
345                 cbItermNameLen =BCL_SMALL_BUFFER_LEN;  
346                 irrel=::RegQueryValueEx(hItem, TEXT("DisplayName"), 0, &typeSZ, (LPBYTE)s_itermName, &cbItermNameLen);//顯示名稱
347                 if ( irrel== ERROR_SUCCESS) 
348                 {
349                     infos.PiName=(s_itermName);
350                 }
351                 memset(s_itermName,0,BCL_SMALL_BUFFER_LEN);
352                 cbItermNameLen =BCL_SMALL_BUFFER_LEN; 
353                 irrel=::RegQueryValueEx(hItem, TEXT("DisplayIcon"), 0, &typeSZ, (LPBYTE)s_itermName, &cbItermNameLen) ;//可執行文件路徑 
354                 if (irrel== ERROR_SUCCESS) 
355                 {
356                     infos.PiPath= (s_itermName);
357                     
358                 }
359                 memset(s_itermName,0,BCL_SMALL_BUFFER_LEN);
360                 cbItermNameLen =BCL_SMALL_BUFFER_LEN; 
361                 irrel=::RegQueryValueEx(hItem, TEXT("UninstallString"), 0, &typeSZ, (LPBYTE)s_itermName, &cbItermNameLen) ;//卸載程序路徑
362                 if (irrel== ERROR_SUCCESS) 
363                 {
364                     infos.PiUninstall= (s_itermName);    
365                 }
366                 memset(s_itermName,0,BCL_SMALL_BUFFER_LEN);
367                 cbItermNameLen = BCL_SMALL_BUFFER_LEN; 
368                 irrel=::RegQueryValueEx(hItem,TEXT("Publisher"), 0, &typeSZ, (LPBYTE)s_itermName, &cbItermNameLen) ;//發佈者
369                 if (irrel== ERROR_SUCCESS)
370                 {
371                     infos.PiPublisher= (s_itermName);
372             
373                 }
374                 memset(s_itermName,0,BCL_SMALL_BUFFER_LEN);
375                 cbItermNameLen = BCL_SMALL_BUFFER_LEN; 
376                 irrel=::RegQueryValueEx(hItem, TEXT("InstallDate"), 0, &typeSZ, (LPBYTE)s_itermName, &cbItermNameLen) ;//安裝時間
377                 if (irrel== ERROR_SUCCESS) 
378                 {
379                     infos.PiInstallTime= (s_itermName);
380                 
381                 }
382                 memset(s_itermName,0,BCL_SMALL_BUFFER_LEN);
383                 cbItermNameLen =BCL_SMALL_BUFFER_LEN; 
384                 irrel=::RegQueryValueEx(hItem, TEXT("EstimatedSize"), 0, &typeDWORD, (LPBYTE)&s_EstimatedSize, &cbDWsize) ;//大小
385                 if (irrel== ERROR_SUCCESS)
386                 {
387                     infos.PiSize= s_EstimatedSize/1024;    //
388                     s_EstimatedSize=0;
389                 }
390                 cbItermNameLen = BCL_SMALL_BUFFER_LEN; 
391                 irrel=::RegQueryValueEx(hItem, TEXT("DisplayVersion"), NULL, &typeSZ, (LPBYTE)s_itermName, &cbItermNameLen);//版本
392                 if ( irrel== ERROR_SUCCESS) 
393                 {
394                     infos.PiVersion=(s_itermName);
395                 }
396                 cbItermNameLen = BCL_SMALL_BUFFER_LEN; 
397                 memset(s_itermName,0,BCL_SMALL_BUFFER_LEN);
398                 if (infos.PiName!="")
399                 {
400                     listProgramInfo.push_back(infos);
401                 }
402                 ::RegCloseKey(hItem);    // 關閉二級註冊表(程序屬性信息)
403             }
404             dwIndex = dwIndex + 1;            // 改變dwIndex,循環獲取下移字段
405             cbkeyNamelen = BCL_SMALL_BUFFER_LEN;
406             memset(s_keyName,0,cbkeyNamelen);
407             lResult = RegEnumKeyEx(hSubKey, dwIndex, s_keyName, &cbkeyNamelen, 0, NULL, NULL, NULL);
408         }
409         RegCloseKey(hSubKey);    // 關閉一級註冊表(讀取程序信息)
410         return ERROR_SUCCESS;
411     }
412     RegCloseKey(hSubKey);
413     return lResult;
414 }
415 
416 BCL_API int CALLBACK BCL_RegAddTipTitleAndContent(string strTitle,string strContent)
417 {
418     long lRval=0;
419     lRval=BCL_RegSetKeyIterm(HKEY_LOCAL_MACHINE,"SoftWare\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","legalnoticecaption",REG_SZ,(void*)(strTitle.c_str()),strTitle.size());
420     if (lRval!=ERROR_SUCCESS)
421     {
422         return lRval;
423     }
424     lRval=BCL_RegSetKeyIterm(HKEY_LOCAL_MACHINE,"SoftWare\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","legalnoticetext",REG_SZ,(void*)(strContent.c_str()),strContent.size());
425     return lRval;
426 }
427 BCL_API int CALLBACK BCL_RegRemoveTipTitleAndContent()
428 {
429     long lRval=0;
430     lRval=BCL_RegDeleteKeyIterm(HKEY_LOCAL_MACHINE,"SoftWare\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","legalnoticecaption");
431     if (lRval!=ERROR_SUCCESS)
432     {
433         return lRval;
434     }
435     lRval=BCL_RegDeleteKeyIterm(HKEY_LOCAL_MACHINE,"SoftWare\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","legalnoticetext");
436     return lRval;
437 }
BCL_Regedit.cpp

 

1.註冊表的做用html

註冊表是windows系統的數據庫,保存了系統、用戶、程序的信息,經過修改註冊表能夠對系統進行設置,能夠獲取程序信息、用戶信息等,能夠修改環境變量,能夠設置程序開機自啓動,修改主頁,取消運行、重啓、關機、註銷按鈕等。只要你知道註冊表中對應鍵和鍵值的功能瞭解,就能夠經過修改鍵值來從新對系統進行設置或修改。修改註冊表是直接對系統的核心數據庫進行修改,具備很強大的功能,不能亂用,若是註冊表受到了破壞,輕則使windows的啓動過程出現異常,重則可能會致使整個windows系統的徹底癱瘓。所以正確地認識、使用,特別是及時備份以及有問題恢復註冊表對windows用戶來講就顯得很是重要。ios

2.註冊表的結構數據庫

註冊表的組織方式跟文件目錄比較類似,主要分爲根鍵、子鍵和鍵值項三部分,與文件目錄對應的話就是根目錄、子目錄和文件。windows

2.1根鍵網絡

註冊表由五個根鍵構成,每一個根鍵保存的信息以下所示。ide

(1)HKEY_CLASSES_ROOT函數

保存着全部的文件和打開程序對應關係。spa

(2)HKEY_CURRENT_CONFIG操作系統

保存着對硬件的配置,包括了系統中現有的全部配置文件的細節。code

(3)HKEY_USERS

保存用戶和目前登錄用戶的信息。

(4)HKEY_LOCAL_MACHINE

包括網絡和硬件上全部的軟件設置。

(5)HKEY_CURRENT_USER

任何在HKEY_CURRENT_USER裏的改動也都會當即HKEY_USERS改動。全部當前的操做改變只是針對當前用戶而改變,並不影響其餘用戶。

2.2子鍵

能夠有多個子鍵和鍵值項,就像一個目錄中能夠有多個子目錄和多個文件同樣。
2.3鍵值項

能夠理解爲文件,它由三部分組成,分別爲:名稱、類型、數據。

鍵值類型又分爲多種主要包括以下:
REG_BINARY 二進制數據
REG_DWORD 32位雙字節數據
REG_SZ 以0結尾的字符串
REG_DWORD_BIG_ENDIAN 高位排在底位的雙字
REG_EXPAND_SZ 擴展字符串,能夠加入變量如%PATH%
REG_LINK UNICODE 符號連接
REG_RESOURCE_LIST 設備驅動程序資源列表
REG_MULTI_SZ 多字符串
註冊表數據項的數據類型有8種,但最經常使用的主要是前3種。

知道註冊表的鍵和鍵值的功能就能夠經過修改註冊表來設置系統參數,或者獲取信息。

3.對註冊表的操做

註冊表鍵的操做包括打開、關閉、新建、刪除、導入、導出、獲取信息、枚舉鍵和鍵值等,註冊表對鍵值的操做有設置值、獲取值、添加、刪除。

下面對鍵和鍵值的操做作了封裝,將註冊表的操做統一成一種風格,主要包括根鍵hRootKey、子鍵路徑strKeyPath包括子鍵名稱,若是strKeyPath爲空,則hRootKey表示打開的子鍵函數是對改鍵的子鍵或鍵值進行操做。能夠很方便的實現鍵和鍵值的增刪改查。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

 

本身編了一個股票監控軟件,有以下功能,有興趣的朋友能夠下載;

(1)   個股監測。監測個股實時變化,能夠監測個股大單交易、急速拉昇和降低、主力入場和出場、股票最高點和最低點提醒。檢測到最高點、最低點、主力進場點、主力退場點、急速拉昇點、急速下跌點,給出語音或者聲音提醒,不用再時刻看着大盤了,給你更多自由的時間;

(2)   大盤監測。監測大盤的走勢,採用上證、深證、創業三大指數的綜合指數做爲大盤走勢。並實時監測大盤的最高點和最低點、中間的轉折點。

(3)   股票推薦。還能根據歷史數據長期或短時間走勢進行分析,對股市3千多個股票進行分析對比,選出漲勢良好的股票,按照增加速度從大到小排序,推薦給你漲勢良好的股票;

下載地址:

1.0.3版本(修復大盤指數崩潰缺陷)下載地址:

連接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取碼:003h

更新連接:

https://www.cnblogs.com/bclshuai/p/10621613.html

相關文章
相關標籤/搜索