vs2013 MFC自己封装的CMyKey类
来源:互联网 发布:大数据零基础培训课程 编辑:程序博客网 时间:2024/05/21 07:49
从vc6.0转到vs2013,原先都是ANSI字符编码,现在vs默认的是Unicode编码。MessageBox("test");都要改成MessageBox(_T("test"));很麻烦!其他方面就不说了。
看到推酷的一篇文章 http://www.tuicool.com/articles/IbEZBr 《对多字节字符编码的支持》是从http://blog.csdn.net/xinzhiyounizhiyouni/article/details/20617981转的。
这句是重点:使vs2013支持多字节字符,这个就需要下载和安装一个文件 http://pan.baidu.com/s/1Acu6M。然后:在项目属性中,把字符集改成多字节字符集。
搞定编码了,接下来就是介绍CMyKey类。
// MyKey.h: interface for the CMyKey class.//Author:阮家友//时 间://QQ:1439120442//我是个技术宅,欢迎交流#pragma onceclass CMyKey {public:CMyKey();virtual ~CMyKey();public: //修改项 不存在则新建 BOOL WriteK(HKEY RootKey /*根键*/, CString path /*路径*/, CString strName /*字符串名称*/, CString str /*要写入的字符串*/); BOOL WriteK(HKEY RootKey /*根键*/, CString path /*路径*/, CString ValueName /*数值名称*/, DWORD value /*数值型*/); //获取值 BOOL GetK(HKEY RootKey /*根键*/, CString path /*路径*/, CString strName /*字符串名称*/, char *pStr /*要保存的字符串对象地址*/); BOOL GetK(HKEY RootKey /*根键*/, CString path /*路径*/, CString strName /*数值名称*/, DWORD &pValue /*要保存的数值变量地址*/); //删除项 BOOL DelK(HKEY RootKey /*根键*/, CString path /*路径*/, CString strName /*子项名称*/);};
// MyKey.cpp: implementation of the CMyKey class.//Author:阮家友//时 间:2015年9月24日13:07:40// QQ:1439120442//我是个技术宅,欢迎交流#include "stdafx.h"#include "MyKey.h"CMyKey::CMyKey(){}CMyKey::~CMyKey(){}//创建项//返回1代表成功;返回0代表失败BOOL CMyKey::WriteK(HKEY RootKey /*根键*/, CString path /*路径*/,CString strName /*字符串名称*/, CString str /*要写入的字符串*/){ HKEY newkey; if(ERROR_SUCCESS==RegOpenKey(RootKey,path,&newkey)) { char *pData=NULL,strArr[MAX_PATH]; pData=(LPSTR)(LPCSTR)str; strcpy_s(strArr,pData); //新建字符串项 if(ERROR_SUCCESS==RegSetValueEx(newkey,strName,NULL,REG_SZ,(unsigned char*)strArr,sizeof(strArr))) {RegCloseKey(newkey);return true;}else{RegCloseKey(newkey);return false;} } else { return false; }}BOOL CMyKey::WriteK(HKEY RootKey /*根键*/, CString path /*位置*/, CString ValueName /*数值名称*/, DWORD value /*数值型*/){ HKEY newkey; if(ERROR_SUCCESS==RegOpenKey(RootKey,path,&newkey)) { //新建数值项 if(ERROR_SUCCESS==RegSetValueEx(newkey,ValueName,NULL,REG_DWORD,(CONST BYTE*)&value,4)){RegCloseKey(newkey);return true;}else{RegCloseKey(newkey);return false;} } else { return false; } }//获取字符串BOOL CMyKey::GetK(HKEY RootKey /*根键*/, CString path /*路径*/, CString strName /*字符串名称*/, char *pStr /*要保存的字符串对象地址*/){HKEY newkey;if(ERROR_SUCCESS==RegOpenKey(RootKey,path,&newkey)){DWORD keyType,len;if(ERROR_SUCCESS==RegQueryValueEx(newkey,strName,NULL,&keyType,(unsigned char *)pStr,&len)){RegCloseKey(newkey);return true;}RegCloseKey(newkey);} //打开失败 return false;}//获取数值BOOL CMyKey::GetK(HKEY RootKey /*根键*/, CString path /*路径*/, CString strName /*数值名称*/, DWORD &pValue /*要保存的数值变量地址*/){HKEY newkey; if(ERROR_SUCCESS==RegOpenKey(RootKey,path,&newkey)) { //成功打开键 DWORD dwType,dwValue,len;//关键问题出在下一句 竟然使得 OnCreate返回了if(ERROR_SUCCESS==RegQueryValueEx(newkey,strName,0,&dwType,(unsigned char *)(LPBYTE)&dwValue,&len)){pValue=dwValue;RegCloseKey(RootKey);return true;}RegCloseKey(RootKey); }return false;}//删除项BOOL CMyKey::DelK(HKEY RootKey /*根键*/, CString path /*位置*/,CString keyname/*名称*/){HKEY newkey; if(ERROR_SUCCESS==RegOpenKey(RootKey,path,&newkey)) { if(ERROR_SUCCESS==RegDeleteValue(newkey,keyname)) {RegCloseKey(RootKey); return true; } } return false;}
测试结果:
测试代码(都是放在按钮的单击事件中的):
void CRegister测试View::OnTest(){//MessageBox("show?");//字符串型 获取char str[MAX_PATH] = { '\0' };BOOL result = key1.GetK(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\TypedPaths", "url1", str);if (result){MessageBox(str);//C:\Users\sophsis\AppData\Roaming\yxj.exe}else{MessageBox("error!");}/*//数值型 获取DWORD value = 20;CString str;if (key1.GetK(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartPage2", "FavoritesVersion", value)){str.Format("value=%d", value);//value=2MessageBox(str);}else{MessageBox("error");//失败则经过这里}*///修改字符串型//key1.WriteK(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\TypedPaths","url1","test");//修改整数型//key1.WriteK(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartPage2","FavoritesVersion",3);//删除//key1.DelK(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\TypedPaths","url1");//key1.DelK(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartPage2","FavoritesVersion");}
0 0
- vs2013 MFC自己封装的CMyKey类
- MFC自己封装的CMytime类
- 自己封装MFC的CSize、CPoint、CRect类
- vs2013封装string类
- 打造自己的MFC:thunk技术实现窗口类的封装
- 打造自己的MFC:thunk技术实现窗口类的封装
- 打造自己的MFC:thunk技术实现窗口类的封装
- VC++/MFC自己封装好的一个访问数据库的类
- 自己封装的MFC操作SQL数据库的类(大家给点建议!)
- 封装自己的socket类
- 自己封装的ajax类
- 封装自己的LOG类
- 自己封装的MR类
- VS2013如何在MFC工程中定义自己的消息映射函数
- MFC CFileDialog 的个性化(VS2013)
- IShellLink接口的MFC封装类
- 一个MFC风格的BrowseForFolder 封装类
- MFC wINMain的封装
- Android调试bug-2015-9-24
- 街区最短路径问题 7 (数学 曼哈顿距离)
- Android 异步查询框架AsyncQueryHandler的使用
- 翻转字符串
- 重写UITabBar 关键步骤小结
- vs2013 MFC自己封装的CMyKey类
- iOS开发证书要点详解,ios证书详解
- wxhl iOS bj 49 张浩 学习心得文章连载 第11章
- 分享补丁模块(带源码)InlinePatch,Hook,内存DLL注入 都有哦
- java学习9.22
- NSLocale用法
- 安卓APP打包成APK
- Fragment的使用之二
- C语言中的运算符优先级