检索注册表(50分)

  • 主题发起人 主题发起人 hansenguo
  • 开始时间 开始时间
H

hansenguo

Unregistered / Unconfirmed
GUEST, unregistred user!
我想要删除注册表的一个项(左边的目录项,假如:XXX),可是它的上一级目录名称是一个长长的编号,
并且,每个系统(2000)的编号还不一样。所以我要检索注册表,定位我要删除的XXX,
一般的方法都是给出所有上级的路径,请教高手:如何定位上级目录不确定的注册表项,
并删除它!
 
分系统检测是否存在 function KeyExists(const Key: String): Boolean;
然后在做你想做的
 
那个函数是不是检索 一个键值用的,我需要的是检索一个目录项。
能不能写几行代码,以示在下?
谢谢!
 
KeyExists好象不只是检索一个键值用的,一个目录项也是一个KEY
你说的键值是VALUE
 
比如我要找一个 名字为 REG1 的项,它的上级目录我不知道,
怎么使用那个函数呢?
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
if reg.KeyExists('REG1') then
showmessage('ss');
没有反映。
 
试试用getkeynames(kkk)///kkk:tstring;
然后在kkk中找
 
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;

list:=TstringList.Create;//如果我用 Tstrings.Ctreate;就报错。
Reg.GetKeyNames(list);
之后 list 的 count 为0,不知为何?请指教。谢谢。
 
没用Reg.OpenKey

...
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
root:='/Software';
reg.OpenKey(root,false);
...
 
你这里指定了 software
其实是 Hkey_uses
但是下一级目录不知道是什么,怎么指定?
 
我没试过,你试试ROOT:=''
 
为什么会不知道目录呢
 
2000下,在 HKEY_USES 下级目录中有些是一长串的编号,不同机器上,号码不同。
 
你的软件的目的是什么?
 
删除 HKEY_USES 下级目录中 S-1-5-21-1229272821-287218729-725345543-1000(这个不同机器上不同)
下面的一个 Welcome 项。
 
那就搜索吧,象搜索文件一样
 
AnsiString Mypath;
TRegistry *Registry = new TRegistry;
TStringList *MyList = new TStringList;
TStringList *MyFullList = new TStringList;
try
{
Registry->RootKey = HKEY_USERS;
int i = 0;
MyFullList->Append("//");
HasDelete = false;
do
{
Mypath = MyFullList->Strings;
Registry->OpenKey(Mypath,false);
Registry->GetKeyNames(MyList);

for(int m = 0; m < MyList->Count; m++)
{

if(MyList->Strings[m] == "wiredred")
{
ShowMessage(1);
Registry->DeleteKey(Mypath+"//wiredred");
break;
}
if(i != 0)
MyFullList->Append(Mypath+"//"+MyList->Strings[m]);
else
MyFullList->Append(Mypath+MyList->Strings[m]);

}
i++;
}while(i < MyFullList->Count);
}
__finally
{
delete Registry;
delete MyList;
delete MyFullList;
}
 
呵呵,我的问题就是怎么搜索注册表。
 
老大,我的想法你可以写一个在HKEY_USER下的遍及函数,
str:=TStringList.Create();
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_USERS;
root:='';//根部
reg.OpenKey(root,false);
reg.getkeynames(str);
for i:=0 to str.count-1 do
下面查找如果找不到,更改ROOT,接着遍历
思路有了试试吧不行我抽空给你写一个.
 
问题是人家的项在每个系统下是不一样的!!!!
我想要了解一下windows是用什么算法来实现这个项命名的!
这样就可以找到地应的项了…
 
有简单的为什么非要找什么算法,
实在不行就做一个全部遍历只不过是可时间要稍长一点的。
我的Email:leaber@163.net
QQ:19491841
 
后退
顶部