|
Registriert seit: 21. Aug 2003 4.856 Beiträge |
#1
Hier eine möglichkeit, eine eigene dateiendung zu registrieren:
Delphi-Quellcode:
und die passende deinstallationsroutine dazu:
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;
Delphi-Quellcode:
und hier noch eine möglichkeit von
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; ![]() ![]()
Delphi-Quellcode:
[edit=Matze]Code formatiert. Mfg, Matze[/edit]
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; |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |