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
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 }
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