从vc6.0转到vs2013,原先都是ANSI字符编码,现在vs默认的是Unicode编码。MessageBox("test");都要改成MessageBox(_T("test"));很麻烦!其他方面就不说了。
看到推酷的一篇文章 http://www.tuicool.com/articles/IbEZBr 《对多字节字符编码的支持》是从http://blog.youkuaiyun.com/xinzhiyounizhiyouni/article/details/20617981转的。
这句是重点:使vs2013支持多字节字符,这个就需要下载和安装一个文件 http://pan.baidu.com/s/1Acu6M。然后:在项目属性中,把字符集改成多字节字符集。
搞定编码了,接下来就是介绍CMyKey类。
// MyKey.h: interface for the CMyKey class.
//Author:阮家友
//时 间:
//QQ:1439120442
//我是个技术宅,欢迎交流
#pragma once
class 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=2
MessageBox(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");
}