Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.054 c
1-1116939128
Новичек
2005-05-24 16:52
2005.06.14
Приоритет потока.


14-1116788413
Qwertyk
2005-05-22 23:00
2005.06.14
Тотализаторы(попытка № 2 :) )


3-1115211791
pavel_guzhanov
2005-05-04 17:03
2005.06.14
Как в базу данных поместить картинку?


1-1116936121
Alex_C
2005-05-24 16:02
2005.06.14
Ttherad и Telnet


14-1116849703
inic
2005-05-23 16:01
2005.06.14
Опрос: Как далеко от дома работаете ?