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

Как зарегистрировать свой пункт в меню для моего типа файлов

Delphi , Файловая система , Файлы



Автор: http://www.swissdelphicenter.ch

uses
  Registry;

procedure AddFileMenue(FilePrefix, Menue, Command: string);
var
  reg: TRegistry;
  typ: string;
begin
  reg := TRegistry.Create;
  with reg do
  begin
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey('.' + FilePrefix, True);
    typ := ReadString('');
    if typ = '' then
    begin
      typ := Fileprefix + 'file';
      WriteString('', typ);
    end;
    CloseKey;
    OpenKey(typ + '\shell\' + Menue + '\command', True);
    WriteString('', command + ' "%1"');
    CloseKey;
    Free;
  end;
end;

procedure DeleteFileMenue(Fileprefix, Menue: string);
var
  reg: TRegistry;
  typ: string;
begin
  reg := TRegistry.Create;
  with reg do
  begin
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey('.' + Fileprefix, True);
    typ := ReadString('');
    CloseKey;
    OpenKey(typ + '\shell', True);
    DeleteKey(Menue);
    CloseKey;
    Free;
  end;
end;

{ Example / Beispiel:}

procedure TForm1.Button1Click(Sender: TObject);
begin
  { Register the Menuepoint: }

  AddFileMenue('rtf', 'Edit with Notepad', 'C:\Windows\system\notepad.exe');

  {
    If you now click with the right mousebutton on a *.rtf-file then
    you can see a Menuepoint: "Edit with Notepad".
    When Click on that point Notepad opens the file.

    Wenn man nun mit der rechten Maustaste im Explorer auf eine *.rtf-Datei Clickt,
    dann erscheint dort der Menuepunkt "Edit with Notepad".
    Beim Clicken darauf, цffnet Notepad diese Datei.
  }
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  {
   Unregister the Menuepoint / Undo your changes in the Registry:
   Lцscht den Menuepunkt wieder aus der Registry:
  }

  DeleteFileMenue('rtf', 'Edit with Notepad');
end;

Привет! Я перевёл текст на русский язык:

Код, предоставленный ниже, используется для регистрации и отмены контекстного меню для конкретного типа файлов в реестре Windows. Процедура AddFileMenu добавляет новый элемент контекстного меню, а процедура DeleteFileMenu удаляет существующий.

Вот подробное описание того, как это работает:

  1. AddFileMenu(FilePrefix, Menu, Command: string): Эта процедура регистрирует новый элемент контекстного меню для указанного типа файлов (FilePrefix). Она создает ключ реестра в HKEY_CLASSES_ROOT\.FilePrefix, проверяет, существует ли уже этот ключ, и устанавливает его значение в Fileprefix + 'file'. Затем она создает другой ключ реестра в HKEY_CLASSES_ROOT\Fileprefix\shell\<Menu>\command и устанавливает его значение в указанную команду (Command) с добавлением пути к файлу %1.
  2. DeleteFileMenu(FilePrefix, Menu: string): Эта процедура удаляет ранее зарегистрированный элемент контекстного меню для указанного типа файлов (FilePrefix). Она создает ключ реестра в HKEY_CLASSES_ROOT\.FilePrefix, затем навигирует по HKEY_CLASSES_ROOT\Fileprefix\shell\<Menu> и удалит его.

Пример кода демонстрирует, как использовать эти процедуры. Когда вы кликните на кнопку Button1, контекстное меню "Edit with Notepad" будет зарегистрировано для типа файлов .rtf, позволяя вам редактировать файл .rtf с помощью Notepad, правой кликой на него и выбором элемента меню. Когда вы кликните на кнопку Button2, это контекстное меню будет отменено.

Вот упрощенная версия кода с некоторыми минорными улучшениями:

uses
  Registry;

procedure AddFileMenu(FilePrefix, Menu, Command: string);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    reg.OpenKey('.' + FilePrefix, True);
    if not reg.ValueExists('') then
      reg.WriteString('', FilePrefix + 'file');
    reg.CloseKey;

    reg.OpenKey(FilePrefix + '\shell\' + Menu + '\command', True);
    reg.WriteString('', Command + ' "%1"');
    reg.CloseKey;
  finally
    reg.Free;
  end;
end;

procedure DeleteFileMenu(FilePrefix, Menu: string);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    reg.OpenKey('.' + FilePrefix, True);
    reg.CloseKey;

    reg.OpenKey(FilePrefix + '\shell', True);
    reg.DeleteKey(Menu);
    reg.CloseKey;
  finally
    reg.Free;
  end;
end;

Версия кода использует блок try-finally для обеспечения правильного освобождения объекта реестра и включает некоторые минорные улучшения для читаемости.

Как зарегистрировать свой пункт меню для типа файлов с помощью программы на языке Delphi, используя функции работы с реестром.


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

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




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


:: Главная :: Файлы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 00:00:39/0.0032341480255127/0