AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Dateien / Laufwerke Delphi Dateiendungen registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiendungen registrieren

Ein Thema von Meflin · begonnen am 12. Jun 2004 · letzter Beitrag vom 21. Nov 2004
 
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#1

Dateiendungen registrieren

  Alt 12. Jun 2004, 11:58
Hier eine möglichkeit, eine eigene dateiendung zu registrieren:
Delphi-Quellcode:
function InstallExt(Extension, ExtDescription, FileDescription,
                    OpenWith, ParamString: string; IconIndex: Integer;
                    ExtVerb: string = 'Open'): Boolean;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    with Reg do
    begin
      RootKey := HKEY_CLASSES_ROOT;
      OpenKey(Extension, True);
      WriteString('', ExtDescription);
      OpenKey('\' + ExtDescription, True);
      WriteString('', FileDescription);
      OpenKey('DefaultIcon', True);
      WriteString('', OpenWith + ','+IntToStr(IconIndex));
      OpenKey('\' + ExtDescription + '\Shell\'+ExtVerb+'\Command', True);
      WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
    end;
    Result := True;
  except
    Result := False;
  end;
  Reg.Free;
end;
und die passende deinstallationsroutine dazu:
Delphi-Quellcode:
function UnInstallExt(Extension, ExtDescription: String): Boolean;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    with Reg do
    begin
      RootKey := HKEY_CLASSES_ROOT;
      DeleteKey(Extension);
      DeleteKey('\' + ExtDescription);
    end;
    Result := True;
  except
    Result := False;
  end;
  Reg.Free;
end;
und hier noch eine möglichkeit von MathiasSimmack die hier veröffentlicht wurde:
Delphi-Quellcode:
uses
  Registry, ShlObj;

 
function RegisterFileType(const szExtension,
  szInternalName,
  szDescription,
  szFileIcon : string): boolean;
var
  reg : TRegistry;
begin
  // benötigt Admin-Rechte zum Schreiben in HKEY_CLASSES_ROOT
  Result := (IsAdmin) and
  // die Dateiendung sollte mehr als 1 Zeichen haben, denn ...
    (length(szExtension) > 1) and
  // ... das erste Zeichen muss ein Punkt sein
    (szExtension[1] = '.') and
  // und die anderen Parameter dürfen nicht leer sein
    (szInternalName <> '') and
    (szDescription <> '') and
    (szFileIcon <> '');

 
  if(Result) then
  begin
    Result := false;
    reg := TRegistry.Create;
    if(reg <> nil) then
    try
      reg.RootKey := HKEY_CLASSES_ROOT;

 
      // lege Schlüssel für Dateiendung mit Verweis auf
      // internen Namen an
      if(reg.OpenKey(szExtension,true)) then
      try
        reg.WriteString('',szInternalName);
        Result := (reg.ReadString('') = szInternalName);
      finally
        reg.CloseKey;
      end;

 
      // lege Schlüssel mit internem Namen an
      if(Result) and
        (reg.OpenKey(szInternalName,true)) then
      try
        // Beschreibung für Dateityp eintragen
        reg.WriteString('',szDescription);
        Result := (Result) and
          (reg.ReadString('') = szDescription);

 
        if(reg.OpenKey('DefaultIcon',true)) then
        try
          reg.WriteString('',szFileIcon);
          Result := (Result) and
            (reg.ReadString('') = szFileIcon);
        finally
          reg.CloseKey;
        end;
      finally
        reg.CloseKey;
      end;
    finally
      reg.Free;
    end;

 
    // das System über die Änderung "informieren"
    SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,nil,nil);
  end;
end;

 
function UnregisterFileType(const szExtension: string): boolean;
var
  reg : TRegistry;
  s : string;
begin
  Result := (IsAdmin) and
    (length(szExtension) > 1) and
    (szExtension[1] = '.');

 
  if(Result) then
  begin
    reg := TRegistry.Create;
    if(reg <> nil) then
    try
      reg.RootKey := HKEY_CLASSES_ROOT;

 
      // internen Schlüsselnamen für diesen Dateityp
      // ermitteln
      if(reg.OpenKey(szExtension,false)) then
      try
        s := reg.ReadString('');
      finally
        reg.CloseKey;
      end;

 
      // den Hauptschlüssel (= Dateiendung) löschen
      Result := (reg.DeleteKey(szExtension)) and
      // den ermittelten internen Schlüssel ebenfalls löschen
        (s <> '') and
        (reg.KeyExists(s)) and
        (reg.DeleteKey(s));
    finally
      reg.Free;
    end;

 
    SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,nil,nil);
  end;
end;

 

 
const
  szKeyName = '%s\shell\%s';

 
function AddFileHandler(const szInternalName,
  szHandlerName,
  szHandlerDescription,
  szCommandLine: string): boolean;
var
  reg : TRegistry;
begin
  Result := (IsAdmin) and
    (szInternalName <> '') and
    (szHandlerName <> '') and
    (szCommandLine <> '');
  // "szHandlerDescription" ist optional und wird
  // nicht geprüft
 
  if(Result) then
  begin
    reg := TRegistry.Create;
    if(reg <> nil) then
    try
      reg.RootKey := HKEY_CLASSES_ROOT;

 
      // der Schlüssel "szInternalName" muss existieren
      if(reg.KeyExists(szInternalName)) then
      begin
        // dann wird ein entsprechender Unterschlüssel mit
        // der gewünschten Aktion erzeugt
        if(reg.OpenKey(Format(szKeyName + '\command',
          [szInternalName,szHandlerName]),true)) then
          try
            // die angegebene "Kommandozeile" wird als
            // Standard eingetragen
            reg.WriteString('',szCommandLine);
            Result := (reg.ReadString('') = szCommandLine);
          finally
            reg.CloseKey;
          end;

 
        // gibt es eine Beschreibung?
        if(szHandlerDescription <> '') then
          if(reg.OpenKey(Format(szKeyName,
            [szInternalName,szHandlerName]),true)) then
            try
              reg.WriteString('',szHandlerDescription);
            finally
              reg.CloseKey;
            end;
      end;
    finally
      reg.Free;
    end;
  end;
end;

 
function DelFileHandler(const szInternalName,
  szHandlerName : string): boolean;
var
  reg : TRegistry;
begin
  Result := (IsAdmin) and
    (szInternalName <> '') and
    (szHandlerName <> '');

 
  if(Result) then
  begin
    reg := TRegistry.Create;
    if(reg <> nil) then
    try
      reg.RootKey := HKEY_CLASSES_ROOT;
      Result :=
        (reg.KeyExists(Format(szKeyName,[szInternalName,szHandlerName]))) and
        (reg.DeleteKey(Format(szKeyName,[szInternalName,szHandlerName])));
    finally
      reg.Free;
    end;
  end;
end;

 
function SetDefaultHandler(const szInternalName,
  szDefaultHandler: string): boolean;
var
  reg : TRegistry;
begin
  Result := (IsAdmin) and
    (szInternalName <> '') and
    (szDefaultHandler <> '');

 
  if(Result) then
  begin
    reg := TRegistry.Create;
    if(reg <> nil) then
    try
      reg.RootKey := HKEY_CLASSES_ROOT;

 
      if(reg.KeyExists(szInternalName)) and
        (reg.OpenKey(szInternalName + '\shell',false)) then
      try
        reg.WriteString('',szDefaultHandler);
        Result := (reg.ReadString('') = szDefaultHandler);
      finally
        reg.CloseKey;
      end;
    finally
      reg.Free;
    end;
  end;
end;
[edit=Matze]Code formatiert. Mfg, Matze[/edit]
  Mit Zitat antworten Zitat
 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz