64,647
社区成员
发帖
与我相关
我的任务
分享
#include <windows.h>
#include <stdio.h>
BOOL QueryKey(HKEY RootKey, char *pSubKey)
{
HKEY hKey;
TCHAR lpName[255]; // buffer for subkey name
TCHAR SubKeyTemp[255];
DWORD dwIndex,cbName; // ,size of name string
DWORD lpcSubKeys=0; // number of subkeys
BOOL flag = TRUE;
if(RegOpenKeyEx( RootKey,TEXT(pSubKey),0,KEY_READ,&hKey) != ERROR_SUCCESS) flag = FALSE;
if(RegQueryInfoKey(hKey,NULL,NULL,NULL,&lpcSubKeys,NULL,NULL,NULL,NULL,NULL,NULL,NULL) != ERROR_SUCCESS) flag = FALSE;
if (lpcSubKeys)
{
for (dwIndex=0; dwIndex < lpcSubKeys; dwIndex++)
{ cbName = 255;
if (RegEnumKeyEx(hKey, dwIndex, lpName, &cbName, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
printf("%s\n", lpName);
sprintf(SubKeyTemp,"%s\\%s",pSubKey,lpName);
QueryKey(RootKey,SubKeyTemp);
}
else flag = FALSE;
}
} //else RegDeleteKey();只想用这个api 但是这个api删除时要求不能有子项 也只能从最低层 删除 。。怎么改写
RegCloseKey(hKey);
return flag;
}
int main(void)
{
QueryKey(HKEY_CURRENT_USER,"Software\\Tencent");
}
BOOL QueryKey(HKEY RootKey, char *pSubKey)
{
HKEY hKey;
TCHAR lpName[255]; // buffer for subkey name
TCHAR SubKeyTemp[255];
DWORD dwIndex,cbName; // ,size of name string
DWORD lpcSubKeys=0; // number of subkeys
BOOL flag = TRUE;
if(RegOpenKeyEx( RootKey,pSubKey,0,KEY_READ,&hKey) != 0)
flag = false;
if(RegQueryInfoKey(hKey,NULL,NULL,NULL,&lpcSubKeys,NULL,NULL,NULL,NULL,NULL,NULL,NULL) != 0)
flag = false;
if (lpcSubKeys)
{
int _dwIndex = 0;
for (dwIndex=0; dwIndex < lpcSubKeys;dwIndex++)
{
cbName = 255;
if (RegEnumKeyEx(hKey, _dwIndex, lpName, &cbName, NULL, NULL, NULL, NULL) == 0)
{
printf("key : %s\n", lpName);
if(QueryKey(hKey,lpName) == false)
_dwIndex++;
}
else
{
cout<<"Enum Error"<<endl;
flag = FALSE;
}
}
} //else RegDeleteKey();只想用这个api 但是这个api删除时要求不能有子项 也只能从最低层 删除 。。怎么改写
if(RegDeleteKey(RootKey,pSubKey) == 0)
cout<<pSubKey<<" : Delete\n";
else
flag = false;
RegCloseKey(hKey);
return flag;
}
又改了下,这个应该是没有权限删不了,有权限的都能删了。BOOL QueryKey(HKEY RootKey, char *pSubKey)
{
HKEY hKey;
TCHAR lpName[255]; // buffer for subkey name
TCHAR SubKeyTemp[255];
DWORD dwIndex,cbName; // ,size of name string
DWORD lpcSubKeys=0; // number of subkeys
BOOL flag = TRUE;
if(RegOpenKeyEx( RootKey,pSubKey,0,KEY_READ,&hKey) != 0)
flag = FALSE;
if(RegQueryInfoKey(hKey,NULL,NULL,NULL,&lpcSubKeys,NULL,NULL,NULL,NULL,NULL,NULL,NULL) != 0)
flag = FALSE;
if (lpcSubKeys)
{
for (dwIndex=0; dwIndex < lpcSubKeys; dwIndex++)
{
cbName = 255;
if (RegEnumKeyEx(hKey, 0, lpName, &cbName, NULL, NULL, NULL, NULL) == 0)
{
printf("key : %s\n", lpName);
QueryKey(hKey,lpName);
//sprintf((char*)SubKeyTemp,"%s\\%s",pSubKey,lpName);
//QueryKey(RootKey,(char*)SubKeyTemp);
}
else
{
cout<<"Enum Error"<<endl;
flag = FALSE;
}
}
} //else RegDeleteKey();只想用这个api 但是这个api删除时要求不能有子项 也只能从最低层 删除 。。怎么改写
if(RegDeleteKey(RootKey,pSubKey) == 0)
cout<<pSubKey<<" : Delete\n";
RegCloseKey(hKey);
return flag;
}