导入导出注册
项的类
导入导出注表导的导册
作者,郭欣阳
源代导 1: 配套代导
最近因导工作的需要~要导注表导导行导恢导~于是我就去了解了一下注表的相导册份册内
容。原本我打算用RegSaveKey和RegRestoreKey来份导行导恢导。可是在使用导程
中导导导函使用起非常麻导~于是就导导的解方法。导导一段导导的努力~我最导两个数来找决
完成了注表导导入导出的功能。导导导介如下,册个
一、导取注表导的各导导~然后到文件中册个写
void ExportRegistry(
CString cstrKeyRootName, //注表根导~如册HKEY_CURRENT_USERCString cstrKeyName, //注表子导册
CString cstrFileName) //导出的文件名;包括路,径
{
FILE *fp;
HKEY hKeyRootName;
CString cstrFullPathStr(_T(""));
if(cstrKeyRootName == _T("HKEY_CLASSES_ROOT"))
hKeyRootName = HKEY_CLASSES_ROOT;
else if(cstrKeyRootName == _T("HKEY_CURRENT_USER"))
hKeyRootName = HKEY_CURRENT_USER;
else if(cstrKeyRootName == _T("HKEY_LOCAL_MACHINE"))
hKeyRootName = HKEY_LOCAL_MACHINE;
else if(cstrKeyRootName == _T("HKEY_USERS"))
hKeyRootName = HKEY_USERS;
else if(cstrKeyRootName == _T("HKEY_PERFORMANCE_DATA"))
hKeyRootName = HKEY_PERFORMANCE_DATA;
else if(cstrKeyRootName == _T("HKEY_CURRENT_CONFIG"))
hKeyRootName = HKEY_CURRENT_CONFIG;
else if(cstrKeyRootName == _T("HKEY_DYN_DATA"))
hKeyRootName = HKEY_DYN_DATA;
fp = fopen(cstrFileName, "w+");
if(fp == NULL)
{
MessageBox(NULL, _T("Error while creating the file"), _T("Registry export"), MB_OK);
return;
}
if(cstrKeyName.IsEmpty())
cstrFullPathStr = cstrKeyRootName;
else
cstrFullPathStr = cstrKeyRootName + _T("\\") + cstrKeyName;
//// First print the header ..... this may be different for some version of Windows... do manually change if required
//Here need to add version check
DWORD dwVersion = GetVersion();
// Get build numbers for Windows NT or Win32s
if (dwVersion < 0x80000000) // Windows NT
{
fprintf(fp, "%s\n", _T("Windows Registry Editor Version 5.00"));
}
else // Win32s
{
fprintf(fp, "%s\n", _T("REGEDIT4"));
}
EnumerateValues(hKeyRootName, cstrKeyName, fp, cstrFullPathStr);
EnumerateKey(hKeyRootName, cstrKeyName , fp , cstrFullPathStr);
fclose(fp);
}
导导方法比导原始~也比导导导~是直接导取、枚导注表的导导~然后一导一导的到文件中册写。
导导方法是我在考参Thanigai Murugan K.;具的出导导不起了,的。他原导出体来写来
的函中存在比导多的导导~一是不能导出所有的导导~二是导出的有些导导不符合导范~无数
法导行导入。我除了EnumerateValues函有修改外~其他的函全都重新了一数没数写
遍。导函使用起也非常方便~例如,个数来
CRegisterExport re;
re.ExportRegistry("HKEY_CURRENT_USER","Software\\VCKBASE","C:\\Test.reg");
二、使用ShellExecute方式导入导出注表导册
使用ShellExecute函导行注表导入导出就非常方便~不导有一点要注意~就是 要数册
在文件路和注表导的字符串中添加径册"。因导~如果不添加"的导~在导入导出 的文件名
有空格的导候~ShellExecute函就导导。添加数会"如下,
CString strTemp =
"/e \"C:\\Test.reg\" \"HKEY_CURRENT_USER\\Software\\VCKBASE\"";
导出
void ShellExportRegister(
LPCTSTR lpExportStr, //注表导~如册
HKEY_CURRENT_USER\SofteWare
LPCTSTR lpExportFile) //导出的文件名;包括路,径
{
CString strItem(lpExportStr);
CString strFileName(lpExportFile);
CString strFilePath;
CString strParameters;
int nIndex = 0;
strParameters = "/e \"" + strFileName + "\" \"" + strItem + "\"";
ShellExecute(0,"open","regedit.exe",
strParameters, NULL , SW_SHOWNORMAL);}
使用例子,
CRegisterExport re;
re.ShellExportRegister("HKEY_CURRENT_USER\\Software\\VCKBAS
E","C:\\Test.reg");
导入
void ShellImportRegister(
LPCTSTR lpImportFile) //导入的注表文件册
{
CString strItem(lpImportFile);
CString strParameters;
strParameters = "/s \"" + strItem + "\"";
ShellExecute(NULL,"open","regedit.exe",
strParameters,NULL,SW_HIDE);
}
使用例子,
CRegisterExport re;
re.ShellImportRegister("C:\\Test.reg");导在导缺少直接导取导出的注表文件~然后一导一导的到注表中的功能~如果 那位册写册
有导导的导~可以把导功能添上。个
导像1:界面效果导