优化大师其中有一项清理注册表的功能。我想问怎样判断是冗余项?怎样判断哪些项是非法的?可以删除?是不是说健值的数据项为空就是冗余项?高手请给出代码,不胜感激。还有怎样遍历注册表???????????????????
急急急!!!!
给分100
急急急!!!!
给分100
解决方案 »
- 以二进制格式保存到数据库的字符串,怎么以正常的方式能进WORD里面啊
- 使用VS2008写的MFC程序,如何生成可执行文件之后,在没有安装VS2008的机器上运行?
- VC中如何查询所有串口上是否连接设备
- 导航软件中,方向指示的箭头怎么实现随着我们方位的改变不断的旋转哪?
- 帮帮忙啊,呆会儿要交了
- 一个图书销售系统(程序还是有问题),请求帮助
- 关于CFileFind跟OnMouseMove()的两个问题,知道的请看一下
- 响应UPDATE_COMMAND_UI消息时出现的问题
- CScrollView中如何实现滚动条的自动显示
- MFC对话框在控件上画线
- 如何在对话框中加入视,急
- 只要线程之间没有对全局的数据进行操作就不用同步了
#include<conio.h>
#include<time.h>
#include<windows.h>HKEY hKey[] = {HKEY_CLASSES_ROOT,
HKEY_CURRENT_USER,
HKEY_LOCAL_MACHINE,
HKEY_USERS,
HKEY_CURRENT_CONFIG};
char *sKey[] = {"HEKY_CLASSES_ROOT",
"HEKY_CURRENT_USER",
"HEKY_LOCAL_MACHINE",
"HEKY_USERS",
"HEKY_CURRENT_CONFIG"};char data_set[1024];
DWORD nCount = 0; // calculate the keys numbervoid EnumValue(HKEY hKey)
{
int dwIndex = 0;
char valuename[MAX_PATH + 1];
DWORD valuenamelen;
DWORD Type;
union{
BYTE data[1024];
DWORD idata;
}lpdata;
DWORD datalen; valuenamelen = sizeof(valuename);
datalen = sizeof(lpdata);
memset(&lpdata,0,sizeof(lpdata));
while(::RegEnumValue (hKey,dwIndex,(LPTSTR)valuename,&valuenamelen,
0,&Type,lpdata.data,&datalen) != ERROR_NO_MORE_ITEMS)
{
switch(Type)
{
case REG_SZ:
printf("value:\t%s\tdata:\t%s\n",valuename,(char*)lpdata.data);
break;
case REG_DWORD:
printf("value:\t%sdata:\t%ld\n",valuename,lpdata.idata);
break;
default:
break;
} dwIndex ++;
valuenamelen = sizeof(valuename);
datalen = sizeof(lpdata);
memset(&lpdata,0,sizeof(lpdata));
}}void EnumKey(HKEY hKey,char *sKey)
{
HKEY h;
int dwIndex = 0;
char strkey[2048];
char name[1024] = {0};
DWORD namelen = sizeof(name);
FILETIME ftLastWriteTime; if(::RegOpenKeyEx (hKey,(LPTSTR)data_set,0,KEY_READ,&h) != ERROR_SUCCESS)
{
printf("cann't open key %s!\n",strkey);
return;
}
while(::RegEnumKeyEx (h,dwIndex,name,&namelen,0,NULL,NULL,&ftLastWriteTime) != ERROR_NO_MORE_ITEMS)
{
EnumValue(h);
nCount ++;
printf("%s\\%s\n",sKey,name);
Sleep(100);
HKEY hk;
if(::RegOpenKeyEx (h,(LPTSTR)name,0,KEY_READ,&hk) == ERROR_SUCCESS)
{
strcpy(data_set,"");
strcpy(strkey,sKey);
strcat(strkey,"\\");
strcat(strkey,name);
EnumKey(hk,strkey);
::RegCloseKey (hk);
}
dwIndex += 1;
namelen = sizeof(name); //must be specified every time!!!
}
::RegCloseKey (hKey);
}void main()
{
printf("Enum all reg keys and values\n");
printf("press Enter to start...\n");
getch();
time_t start,end;
time(&start);
for(int i = 0 ; i < 5; i++)
{
strcpy(data_set,"");
EnumKey(hKey[i],sKey[i]);
}
time(&end);
printf("altogether %ld keys!!!\n",nCount);
printf("using time : %ld seconds!\n",end - start );}