Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.12.2011, 22:23
Ashto Ashto вне форума
Прохожий
 
Регистрация: 26.12.2011
Сообщения: 2
Репутация: 10
По умолчанию Курсовой, работа с реестром

Помогите пожалуйста, уже не знаю что делать

Надо найти в выбранных чекбоксами разделах ключи, в значении у которых прописан адрес файла или каталога и проверить его наличие на диске. Если его не существует, то надо вывести ключ в список.

Сразу при вызове процедуры ScanKey появляется ошибка. (я ставил красную точку на exist:=true

First chance exception at $755DB9BC. Exception class EAccessViolation with message 'Access violation at address 00444002 in module 'Project1.exe'. Read of address 00000008'. Process Project1.exe (4776)

Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
    try
    if cbHKEY_CLASSES_ROOT.Checked then
    begin
      FReg.RootKey := HKEY_CLASSES_ROOT;
      ScanKey('');
    end;
    if cbHKEY_CURRENT_USER.Checked then
    begin
      FReg.RootKey := HKEY_CURRENT_USER;
      ScanKey('');
    end;
    if cbHKEY_LOCAL_MACHINE.Checked then
    begin
      FReg.RootKey := HKEY_LOCAL_MACHINE;
      ScanKey('');
    end;
    if cbHKEY_USERS.Checked then
    begin
      FReg.RootKey := HKEY_USERS;
      ScanKey('');
    end;
    if cbHKEY_CURRENT_CONFIG.Checked then
    begin
      FReg.RootKey := HKEY_CURRENT_CONFIG;
      ScanKey('');
    end;
    finally
    end;
end;


procedure TForm1.PrintKey(const AKey, AValue, AData: String);
var
  Find: Integer;
  p: string;

begin
  if FReg.GetDataType(AValue)= rdString then p:= 'REG_SZ  (STRING)';
  if FReg.GetDataType(AValue)= rdExpandString then p:= 'REG_EXPAND_SZ  (ExpandString)';
  // Application.ProcessMessages;

      with ListView3.Items.Add do
        begin

          Caption := AKey;
          SubItems.Add(p);
          SubItems.Add(AData);
        end;

end;

procedure TForm1.ScanKey(Key: String);
var
  S: TStringList;
  I: Integer;
  Stmp:string;
  exist:boolean;
begin
   exist:=true;
  if FReg.OpenKeyReadOnly(Key) then
  try
    S := TStringList.Create;
    try
      FReg.GetValueNames(S);
      for I := 0 to S.Count - 1 do
        if (FReg.GetDataType(S.Strings[i]) in [rdString, rdExpandString])
        and (copy(FReg.ReadString(S.Strings[i]),2,2)=':\') then
        begin
          try exist:=fileexists(FReg.ReadString(S.Strings[i]))
            except
            exist:=DirectoryExists(FReg.ReadString(S.Strings[i]));
            end;
        if not exist then  PrintKey(Key, S.Strings[i], FReg.ReadString(S.Strings[i]));
        exist:=true;
        end;
      S.Clear;
      FReg.GetKeyNames(S);
      for I := 0 to S.Count - 1 do
        if S.Strings[i] <> '' then
          ScanKey(Key + '\' + S.Strings[i]);
    finally
      S.Free;
    end;
  finally
    FReg.CloseKey;
  end;
end;
Admin: Пользуемся тегами для оформления кода!

Последний раз редактировалось Admin, 26.12.2011 в 22:27.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025