Rejestracja własnego rozszerzenia

Misiekd

Przed użyciem tej funkcji do sekcji uses trzeba dopisać Registry

uses
  Registry;
procedure RegisterFileExtension(Ext, Name, ProgramName, Icon: string);
var
  Reg: TRegistry;
begin
  if Ext[1] <> '.' then
    Ext := '.' + Ext;
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    Reg.OpenKey(Ext, True);
    Reg.WriteString('', Name);
    Reg.CloseKey;
    Reg.OpenKey(Name + '\shell\open\command', True);
    Reg.WriteString('', '"' + ProgramName + '" "%1"');
    Reg.CloseKey;
    Reg.OpenKey(Name + '\DefaultIcon', True);
    Reg.WriteString('', Icon);
    Reg.CloseKey;
  finally
    FreeAndNil(Reg);
  end;
end;

Przykład:

RegisterFileExtension('.my_ext', 'My_Extension_File', Application.ExeName, Application.ExeName + ',0')
procedure UnRegisterFileExtension(Ext: string);
var
  Reg: TRegistry;
  Name: string;
begin
  if Ext[1] <> '.' then
    Ext := '.' + Ext;
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    if Reg.OpenKey(Ext, False) then
    begin
      Name := Reg.ReadString('');
      Reg.CloseKey;
      Reg.DeleteKey(Name);
    end;
    Reg.DeleteKey(Ext);
  finally
    FreeAndNil(Reg);
  end;
end;

Przykład:

UnRegisterFileExtension('.my_ext');

Uwagi: Funkcji nie sprawdzają, czy podano poprawne wartości parametrów. Wyjątkiem jest sprawdzanie, czy na początku rozszerzenia jest kropka.

FAQ

9 komentarzy

co do praw rejestru to musisz nadac je aplikacji a nie funkcji, poczytaj o Manifest-ach, zresztą to nie ma być uniwersalny gotowiec który odpowiada na wszystkie pytania. macie tutaj napisane jak rejestrowac rozszerzenie reszte myśleć sami, co z Was za programiści. Przeciez tak naprawdę zarejestrować rozszerzenie to można samemu napisać w kilka linijek.

oj art się zdezaktualizował:/ teraz potrzeba sprawdzania i nadawania praw zapisu do rejestru. Przydał by się dopisek do tego arta..

bueeah =D cóż za odkrycie =) ja sobie kiedyś ręcznie pogrzebałem w rejestrze i z ikonek dysków znikło mi "Otwórz" i "Exploruj" oraz umożliwiłem uruchamianie się exe'ków z rozszerzeniem ".ble" =]

@Sasser.64 patrz IContextMenu

a jak sie na przyklad dodaje pozycje do menu shellowego, a potem z tej pozycji otworzyć podmenu? przydaloby mi sie cos takiego ale nie wiem jak zrobic :(

A gdzie pisze że do uses trzeba dopisać Registry??

Mnich TT to może linka podaj bo nie znalazłem

y.. to już było 4356 lat temu

o_O bardzo ciekawy pomysł i bardzo przydatne. Brawo