Windows下操作注册表

来源:互联网 发布:任务网站源码 编辑:程序博客网 时间:2024/05/16 15:20

最近项目利用FireBreath技术实现网页插件,完成视频监控的截图和录像功能,具体如下:

(1)在每次登陆Web平台时读取本地图片和录像的存储路径;

(2)截图或录像时保存到指定存储路径。

            为实现上述功能,需要在浏览器中保存上述路径,开始考虑Html5的LocalStorage技术,它能通过简单接口实现键值的存取,在浏览器关闭后依然有效,但它和Cookie一样有风险,在用户主动删除浏览器缓存,或通过优化软件删除浏览痕迹等操作后,会删除上述数据,在FireFox和IE中都会出现。所以需要通过其他途径保存该数据。然后就想起用注册表保存该值。

 Windows下VC主要提供两种方式访问注册表:

(1)MFC中CRegKey类提供简单操作访问注册表;

(2)Windows API提供若干操作函数,RegOpenKeyEx, RegCreateKey,  RegSetValueEx,  RegQueryValueEx分别实现打开注册表键值,创建键值,设置键值,查询键值。


下面为通过Windows API函数实现简单注册表设置,读取键值的功能:


#include <windows.h>#include <string>#include <tchar.h>#include <iostream>using namespace std;/*to keep key-value(video path = D:\\JSST\\video) in Windows Register.Location: \HKEY_CURRENT_USER\Software\JSST StorageTips: Cann't read/write in HKEY_LOCAL_MACHINE when your environment is Windows 10, Window 7 is allright.*/// 将TCHAR转为charvoid TCHAR_to_char(const TCHAR *pTCHAR, char *pChar){int iLength = 0;//获取字节长度 iLength = WideCharToMultiByte(CP_ACP, 0, pTCHAR, -1, NULL, 0, NULL, NULL);//转换WideCharToMultiByte(CP_ACP, 0, pTCHAR, -1, pChar, iLength, NULL, NULL);}// char -----> TCHARvoid char_to_TCHAR(const char *pChar, TCHAR *pTCHAR){int iLength = 0;//获取字节长度 iLength = MultiByteToWideChar(CP_ACP, 0, pChar, strlen(pChar) + 1, NULL, 0);//转换MultiByteToWideChar(CP_ACP, 0, pChar, strlen(pChar) + 1, pTCHAR, iLength);}int main(void){HKEY hkey;// 欲存储值string sValue = "D:\\JSST\\video";wstring wstr(sValue.begin(), sValue.end());// 要求存储的为TCHAR数据TCHAR *stValue = (TCHAR *)(&wstr[0]);// 打开成功则返回ERROR_SUCCESS, 路径if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\JSST Storage"), 0, KEY_ALL_ACCESS, &hkey)){//没有则创建RegCreateKey(HKEY_CURRENT_USER, _T("Software\\JSST Storage"), &hkey);}// 设置注册表键值bool ret = RegSetValueEx(hkey, _T("video path"), 0, REG_SZ, (const BYTE*)stValue, 50);// 关闭RegCloseKey(hkey);// 用TCHAR接收,char会异常TCHAR buf[100] = { 0 };char strName[100] = { 0 };HKEY hkey1;DWORD dwType = REG_SZ;DWORD dwSize = 100;//if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\JSST Storage"), 0, KEY_ALL_ACCESS, &hkey1)){if (ERROR_SUCCESS == RegQueryValueEx(hkey1, _T("video path"), 0, &dwType, (LPBYTE)buf, &dwSize)){TCHAR_to_char(buf, strName);}}// 返回string类型值string value = string(strName);cout << value << endl;getchar();}




0 0
原创粉丝点击