Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Взять все расширения из реестра и их описание

Delphi , ОС и Железо , Реестр

Взять все расширения из реестра и их описание

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
 This Code will return the programs associated with each extension. 
 You can obviously modify it to search for a specific extension. 
}

 uses Registry;

 procedure TForm1.Button1Click(Sender: TObject);
 var
   reg: TRegistry;
   keys: TStringList;
   i: Integer;
   typename, displayname, server: string;
 begin
   memo1.Clear;
   reg := TRegistry.Create;
   try
     reg.rootkey := HKEY_CLASSES_ROOT;
     if reg.OpenKey('', False) then
     begin
       keys := TStringList.Create;
       try
         reg.GetKeyNames(keys);
         reg.CloseKey;
         {memo1.lines.addstrings(keys);}
         for i := 0 to keys.Count - 1 do
         begin
           if keys[i][1] = '.' then
           begin
             {this is an extension, get its typename}
             if reg.OpenKey(keys[i], False) then
             begin
               typename := reg.ReadString('');
               reg.CloseKey;
               if typename <> '' then
               begin
                 if reg.OpenKey(typename, False) then
                 begin
                   displayname := reg.ReadString('');
                   reg.CloseKey;
                 end;
                 if reg.OpenKey(typename + '\shell\open\command', False) then
                 begin
                   server := reg.ReadString('');
                   memo1.Lines.Add(Format('Extension: "%s", Typename: "%s", Displayname:"%s"' +
                                          #13#10'  Server: %s',
                                          [keys[i], typename, displayname, server]));
                   reg.CloseKey;
                 end;
               end;
             end;
           end;
         end;
       finally
         keys.Free;
       end;
     end;
   finally
     reg.Free
   end;
 end;

Перевод кода на Delphi, который извлекает все расширения из реестра Windows и связанные с ними детали, такие как тип名, отображаемое имя и сервер (или команда) для каждого расширения.

Обзор того, что код делает:

  1. Процедура Button1Click вызывается при клике соответствующей кнопки.
  2. Очищается контроллер мемо (memo1) для подготовки к отображению результатов.
  3. Создается объект TRegistry (reg) для взаимодействия с реестром Windows.
  4. Устанавливается корневой ключ реестра в HKEY_CLASSES_ROOT, который содержит информацию о типах файлов и их связях.
  5. Открывается реестровый ключ по указанному пути, извлекается список подключений (которые являются расширениями) и проходится циклом через них.
  6. Для каждого расширения открывается соответствующий реестровый ключ (reg.OpenKey(keys[i], False)), читается тип名 из реестровой значения, связанного с пустым строковым ключом (reg.ReadString('')), и закрывается ключ.
  7. Если тип名 не пуст, открывается другой реестровый ключ для извлечения информации о отображаемом имени (reg.ReadString('')) и сервере (или команде) (reg.ReadString('')).
  8. Наконец, строится строка в формате Расширение: "<extension>", Тип名: "<typename>", Отображаемое имя:"<displayname>", Сервер:<server> и добавляется к линиям контроллера мемо.

Код использует объект TRegistry для взаимодействия с реестром, который предоставляет методы для чтения и записи реестровых значений. Корневой ключ HKEY_CLASSES_ROOT используется как корневой ключ, содержащий информацию о типах файлов и их связях.

Некоторые предложения по улучшению:

  • Вместо использования жесткого пути ('HKEY_CLASSES_ROOT')consider использовать enum-значение из единицы Registry, например, Registry.ClassesRoot.
  • Рассмотрите добавление обработки ошибок для случаев, когда реестровый ключ или значение не существует.
  • Вы можете улучшить читаемость кода, разбив его на более маленькие процедуры, каждая с четкой ответственностью.
  • Вместо жесткого кодирования ключей отображаемого имени и сервера (displayname и server)consider использовать константы или enum-значения для улучшения поддержки.

Альтернативное решение заключается в использовании метода GetValueNames объекта TRegistry, чтобы извлечь список реестровых значений, связанных с каждым ключом расширения. Это позволит проходить циклом через значения и извлекать необходимую информацию без необходимости открывать несколько реестровых ключей.

В статье описывается код на языке Delphi, который позволяет получить информацию о расширениях из реестра Windows и их связанных программах.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Реестр ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 05:15:32/0.0034081935882568/0