AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Datentypen in der Registry
Thema durchsuchen
Ansicht
Themen-Optionen

Datentypen in der Registry

Ein Thema von delnu · begonnen am 16. Okt 2015 · letzter Beitrag vom 22. Okt 2015
 
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Datentypen in der Registry

  Alt 17. Okt 2015, 10: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.
  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 09:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz