![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблемы с реестром, кто силён помогите, пожалуйсто [D6, WinXP]
ctranik © (2005-05-27 15:52:00)Всем привет
тут такое дело , хочу просканировать реестр для того чтобы найти интересующий меня ключ.
но почему-то некоторые ключи моя прога неоткрывает (это и есть моя проблема).
Код модуля "Форма" :
ScanKey- это подпрограмма.
unit FindKey;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Registry;
type
TForm2 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
RegFind: TRegistry;
sskey,skey:tstringlist;
implementation
{$R *.dfm}
uses unit1,podprogramy;
procedure TForm2.Button1Click(Sender: TObject);
const findkey='FlashGet';
var
Hk:array[0..4]of Cardinal;
u:hkey;
i,z:integer;
f,s:string;
begin
hk[0]:=HKEY_LOCAL_MACHINE; hk[1]:=HKEY_Current_User; hk[2]:=HKEY_Classes_Root;
hk[3]:=HKEY_Users; hk[4]:=HKEY_Current_Config;
for z:=0 to 4 do begin
RegFind.RootKey := HK[z];
if RegFind.OpenKeyReadOnly(regfind.CurrentPath) then begin
RegFind.GetKeyNames(SKey);
s:=convert(regfind.RootKey);
u:=RegFind.RootKey;
regFind.CloseKey;
end; //if
for i:=0 to skey.Count-1 do begin
f:=s+'\'+skey.Strings[i];
if pos(findkey,skey.Strings[i])>0 then memo1.Lines.add(f);
scankey(u,skey.Strings[i],findkey,SSKey);
memo1.Lines.AddStrings(SSKey);
end;//for
end; //for
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
skey:=tstringlist.Create;
sskey:=tstringlist.Create;
RegFind := TRegistry.Create;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
RegFind.Free;
skey.Free;
sskey.Free;
end;
end.
а это код отдельного модуля, где хранится подпрограммы
unit Podprogramy;
interface
uses Windows,Classes,SysUtils,StdCtrls,Dialogs, Registry,FindKey;
procedure ScanKey(RK:HKey;CK,TargetKey:string;var OutList:TstringList);
function Convert(w:hkey):string;
implementation
procedure ScanKey(rk:HKey;CK,TargetKey:string;var OutList:TstringList);
var
j:integer;
t,b:string;
listkey:tstringlist;
reestr:Tregistry;
begin
reestr:=TRegistry.Create;
listkey:=tstringlist.Create;
reestr.RootKey:=rk;
if reestr.OpenKeyReadOnly(CK) then begin
if reestr.HasSubKeys=true then reestr.GetKeyNames(ListKey);
reestr.CloseKey;
end//if
else showmessage('немогу открыть ключ '+CK);
for j:=0 to listkey.Count-1 do begin
b:=convert(rk)+'\'+CK+'\'+listkey.Strings[j];
t:=ck+'\'+listkey.Strings[j];
if pos(targetkey,listkey.Strings[j])>0 then Outlist.Add(b);
scankey(reestr.RootKey,t,targetkey,OutList);
end;//for
reestr.Free;
listkey.Free;
end;
function Convert(w:hkey):string;
begin
case w of
HKEY_LOCAL_MACHINE : Convert:='HKEY_LOCAL_MACHINE';
HKEY_Current_User : Convert:='HKEY_Current_User';
HKEY_Classes_Root : Convert:='HKEY_Classes_Root';
HKEY_Users : Convert:='HKEY_Users';
HKEY_Current_Config: Convert:='HKEY_Current_Config';
end;
end;
end.
Попробуйте скомпилить эту прогу, и вы всё сами увидите
Заранее благодарен
Andy BitOff (2005-05-27 15:58:00) [1]Извините пожалуйста, но не моглибы Вы хотябы в кратце описать, что " Попробуйте скомпилить эту прогу, и вы всё сами увидите" мы там увидим? А то нет возможности, на данный момент, воспользоваться Delphi.