(Gast)
n/a Beiträge
|
AW: Datentypen in der Registry
17. Okt 2015, 11:38
ungetestete Idee:
Delphi-Quellcode:
uses Registry;
function RegisterProg(
sFileType : String; // wird im Explorer als Typ angezeigt
sStandard : String; // Inhalt des Eintrages (Standard) in der Registry
sProgram : String; // vollständiger Pfad zum Programm
sExt : String // zu verknüpfende Dateiendung
) : Boolean;
var
Reg : TRegistry;
begin
Result := True;
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(sExt, True);
try
Reg.WriteString('', sFileType);
except
Result := False;
end;
Reg.CloseKey;
if Result then begin
Reg.OpenKey(sFileType, True);
try
Reg.WriteString('', sStandard);
except
//
end;
Reg.OpenKey('shell', True);
Reg.OpenKey('open', True);
Reg.OpenKey('command', True);
try
Reg.WriteString('',Format('"%s" "%s"',[sProgram,'%1']));
except
//
end;
Reg.CloseKey;
Reg.CloseKey;
Reg.CloseKey;
Reg.CloseKey;
end;
Reg.Free;
end;
// Aufruf:
begin
RegisterProg('BMP IrfanView','IrfanView','c:\Programme\IrfanView\iview32_.exe','.bmp');
RegisterProg('JPG IrfanView','IrfanView','c:\Programme\IrfanView\iview32_.exe','.jpg');
RegisterProg('JPG IrfanView','IrfanView','c:\Programme\IrfanView\iview32_.exe','.jpeg');
end;
Der Aufruf von RegisterProg ließe sich sicherlich auch über eine Ini-Datei (o. ä.) realisieren, so dass die einzelnen Verknüpfungen nicht fest im Programm verdrahtet werden müssen.
Aufbau der INI-Datei:
Code:
[JPEG]
FileType=JPG IrfanView
Standard=IrfanView
Program=c:\Programme\IrfanView\iview32_.exe
Ext=.jpg
[JPEG]
FileType=JPG IrfanView
Standard=IrfanView
Program=c:\Programme\IrfanView\iview32_.exe
Ext=.jpeg
Aufrufroutine bei die Nutzung einer Ini-Datei:
Delphi-Quellcode:
uses IniFiles;
var
ini : TIniFile;
sl : TStringList;
i : Integer;
sFileType : String;
sStandard : String;
sProgram : String;
sExt : String;
begin
ini := TIniFile.Create('Verknüpfungen.ini');
sl := TStringList.Create;
ini.ReadSections(sl);
for i := 0 to sl.Count - 1 do begin
sFileType := ini.ReadString(sl[i],'FileType','');
sStandard := ini.ReadString(sl[i],'Standard','');
sProgram := ini.ReadString(sl[i],'Program','');
sExt := ini.ReadString(sl[i],'Ext','');
RegisterProg(sFileType,sStandard,sProgram,sExt);
end;
sl.Free;
ini.Free;
end;
und als Konsolenprogramm:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Registry, IniFiles, Windows, Classes;
function RegisterProg(
sFileType : String; // wird im Explorer als Typ angezeigt
sStandard : String; // Inhalt des Eintrages (Standard) in der Registry
sProgram : String; // vollständiger Pfad zum Programm
sExt : String // zu verknüpfende Dateiendung
) : Boolean;
var
Reg : TRegistry;
begin
Result := True;
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(sExt, True);
try
Reg.WriteString('', sFileType);
except
Result := False;
end;
Reg.CloseKey;
if Result then begin
Reg.OpenKey(sFileType, True);
try
Reg.WriteString('', sStandard);
except
//
end;
Reg.OpenKey('shell', True);
Reg.OpenKey('open', True);
Reg.OpenKey('command', True);
try
Reg.WriteString('',Format('"%s" "%s"',[sProgram,'%1']));
except
//
end;
Reg.CloseKey;
Reg.CloseKey;
Reg.CloseKey;
Reg.CloseKey;
end;
Reg.Free;
end;
function ReadIniFile(sIniFile : String) : Boolean;
var
ini : TIniFile;
sl : TStringList;
i : Integer;
sFileType : String;
sStandard : String;
sProgram : String;
sExt : String;
begin
Result := FileExists(sIniFile);
if Result then begin
WriteLn(Format('%s:',[sIniFile]));
sl := TStringList.Create;
ini := TIniFile.Create(sIniFile);
ini.ReadSections(sl);
for i := 0 to sl.Count - 1 do begin
sFileType := ini.ReadString(sl[i],'FileType','');
sStandard := ini.ReadString(sl[i],'Standard','');
sProgram := ini.ReadString(sl[i],'Program','');
sExt := ini.ReadString(sl[i],'Ext','');
if RegisterProg(sFileType,sStandard,sProgram,sExt) then begin
WriteLn(Format('Verknuepfung %s wurde erstellt.',[sFileType]));
end else begin
WriteLn(Format('Verknuepfung %s konnte nicht erstellt werden.',[sFileType]));
end;
end;
ini.Free;
sl.Free;
end;
end;
var
k : Integer;
begin
if ParamCount < 1 then begin
WriteLn('Aufruf:');
WriteLn(Format('%s Ini-Datei [,Ini-Datei ... ,Ini-Datei]',[ParamStr(0)]));
Halt(1);
end;
for k := 1 to ParamCount do begin
if not ReadIniFile(ParamStr(k)) then begin
WriteLn(Format('Die INI-Datei %s wurde nicht gefunden.',[ParamStr(k)]));
end;
end;
end.
|