Einzelnen Beitrag anzeigen

Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#10

Re: mp3's mit meinem Programm Verknüpfen-Problem

  Alt 9. Apr 2005, 11:08
So, ich habe dir jetzt mal für deine Bedürfnisse eine Function geschrieben:
Delphi-Quellcode:
function InstallExt(Extension, ExtDescription, FileDescription, ExecuteDescription,
                    OpenWith, ParamString: string; IconIndex: Integer = 0;
                    ExtVerb: string = 'Open'): Boolean;
var Reg:TRegistry;
begin
  Result:=false;
  Reg:=TRegistry.Create;
  try
    Reg.RootKey:=HKEY_CLASSES_ROOT;
    if Reg.OpenKey(Extension,true) then
    begin
      Reg.WriteString('',ExtDescription);
      Reg.CloseKey;
      if Reg.OpenKey(ExtDescription,true) then
      begin
        Reg.WriteString('',FileDescription);
        if Reg.OpenKey('DefaultIcon',true) then
        begin
          { -- OpenKey öffnet ohne vorangestelltes '\' den beschriebenen
            Unterschlüssel, wenn vorhanden -- }

          Reg.WriteString('',OpenWith+','+inttostr(IconIndex));
          Reg.CloseKey;
          if Reg.OpenKey(ExtDescription+'\Shell',true) then
          begin
            Reg.WriteString('',ExtVerb); // fett markieren
            if Reg.OpenKey(ExtVerb,true) then
            begin
              Reg.WriteString('',ExecuteDescription); // z.B. "Open with MyProgramm"
              if Reg.OpenKey('Command',true) then
              begin
                Reg.WriteString('','"'+OpenWith+'" '+ParamString);
                Reg.CloseKey;
                Result:=true;
              end;
            end;
          end;
        end;
      end;
    end;
    finally
      Reg.Free;
    end;
  { -- Icon für die neue Dateiendung setzen/aktualisieren -- }
  { -- benötigt die uses ShlObj -- }
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if InstallExt('.ttt','ttt-datei','my own ext','Play with MyProgramm',
                Application.ExeName,'"%1"',0,'Play') then
  begin
    showmessage('successful!');
  end else showmessage('failure!');
end;
=> ExtDescription darf meiner Meinung nach keine Leerzeichen enthalten
=> ExecuteDescription kannste so schreiben, wie du willst ;-)
Am besten nutzt du auch wirklich den Vorteil des Rückgabewertes (if [...] then), um zukünftige Fehler schneller zu entdecken.
  Mit Zitat antworten Zitat