Текущий архив: 2005.06.14;
Скачать: CL | DM;
Внизпроблемы с реестром, кто силён помогите, пожалуйсто Найти похожие ветки
← →
ctranik (2005-05-27 15:52) [0]Всем привет
тут такое дело , хочу просканировать реестр для того чтобы найти интересующий меня ключ.
но почему-то некоторые ключи моя прога неоткрывает (это и есть моя проблема).
Код модуля "Форма" :
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) [1]Извините пожалуйста, но не моглибы Вы хотябы в кратце описать, что "Попробуйте скомпилить эту прогу, и вы всё сами увидите" мы там увидим? А то нет возможности, на данный момент, воспользоваться Delphi.
Страницы: 1 вся ветка
Текущий архив: 2005.06.14;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.05 c