Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datein mit meinem Programm öffnen (https://www.delphipraxis.net/37561-datein-mit-meinem-programm-oeffnen.html)

kingflo 7. Jan 2005 11:19


Datein mit meinem Programm öffnen
 
Hallo ich habe schon gesucht aber nichts gefunden, wie kann ich es anstellen, dass ich z.b *.mp3 Datein mit meinem Programm öffne?

ich habe es so versucht

Delphi-Quellcode:
function InstallExt(Extension, ExtDescription, FileDescription,
                    OpenWith, ParamString: String; IconIndex: Integer): 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\Open\Command', True);
      WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
     end;
   Result := True;
  except
   Result := False;
  end;
  Reg.Free;
end;

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;

...

 InstallExt('.mp3', 'MP3 Datei', 'Player', Application.ExeName, '%1',0);
 UnInstallExt('.mp3', 'MP3 Datei');
Allerdings geht es so nicht mit dieser Methode kann ich nur Datein assoziieren, die es noch nicht gibt z.B
Delphi-Quellcode:
 InstallExt('.xyz', 'xyz Datei', 'Player', Application.ExeName, '%1',0);
 UnInstallExt('.xyz', 'xyz Datei');
Weiß da zufällig jemand ne bessere möglichkeit??

[edit=Christian Seehase]Code-Tags durch Delphi-Tags ersetzt. Mfg, Christian Seehase[/edit]
[edit=Christian Seehase] Mfg, Christian Seehase[/edit]

freak4fun 7. Jan 2005 11:36

Re: Datein mit meinem Programm öffnen
 
Hallo,
kann man das nicht über die Eigenschaften der entsprechenden Datei machen?

Rechte Maustaste -> Eigenschaften -> Öffnen Mit: Ändern -> dein Programm rein (Haken bei immer öffnen mit) und gut.

Ist aber, wenn ich mir das überleger wahrscheinlich das Gleiche. :mrgreen:

mfg
freak

kingflo 7. Jan 2005 11:38

Re: Datein mit meinem Programm öffnen
 
Ja, das kann man aber das will ich ja nicht.
Es soll ja im Programm einstellbar sein! :wink:
Sonst müsste der Benutzer ja bei den entsprechenden Datein erst die rechte Maustaste drücken und mein Programm suchen und auswählen. Das ist aber ja doof.

Stell dir mal vor du müsstest erst den Windows Media Player suchen oder Winamp oder so... das würde dich auch nerven oder??

freak4fun 7. Jan 2005 11:45

Re: Datein mit meinem Programm öffnen
 
Ich mache es so. :zwinker: Aber ebend nur ein mal. Und dann gilt es für alle Dateien.
Aber auf dein Programm bezogen: Anders geht es wahrscheinlich nicht. Und wenn Windoof es genause macht, kann es nicht flasch sein. :angel2:

Was stört dich denn daran?

mfg
freak

Schuster 7. Jan 2005 11:45

Re: Datein mit meinem Programm öffnen
 
Ist das Programm mit dem eine Datei geöffnet werden soll nicht in der Regestry gespeichert???

Glaub ich zumindest.

Wenn du also dort den Pfad zu deinem Progi angibst sollte es funken.

Christian Seehase 7. Jan 2005 12:07

Re: Datein mit meinem Programm öffnen
 
Moin Florian,

grundsätzlich müsste es funktionieren, allerdings sollte OpenWith auch im Key DefaultIcon in " eingeschlossen werden.
Sollten mehr solche Konstruktionen in Deinem Programm auftauchen, wird das System über kurz oder lang eine "Out of Resource" Meldung von sich geben, da die geöffneten Keys nicht wieder geschlossen werden.
Das Objekt wird, im Falle einer Exception auch nicht freigegeben.

Man sollte bei bestehender Verknüpfung noch die Einstellungen für die alte sichern, und im Fehlerfalle restaurieren.
Da zu einer Dateitypverknüpfung auch noch mehr gehört als DefaultIcon und Shell\Open\Command, kann es auch nicht schaden dann einen bestehenden Key erst einmal zu löschen, bevor man die neuen Werte einträgt (wie gesagt, sichern nicht vergessen).

Ich hab's mal grob überarbeitet.

Delphi-Quellcode:
begin
  Result := false;
  Reg := TRegistry.Create;
  try
    with Reg do begin
      RootKey := HKEY_CLASSES_ROOT;
      if not OpenKey(Extension, True) then exit;
      try
        WriteString('', ExtDescription);
      finally
        CloseKey;
      end;
      if not OpenKey('\' + ExtDescription, True) then exit;
      try
        WriteString('', FileDescription);
      finally
        CloseKey;
      end;
      if not OpenKey('DefaultIcon', True) then exit;
      try
        WriteString('', '"'+OpenWith + '",'+IntToStr(IconIndex));
      finally
        CloseKey;
      end;
      if not OpenKey('\' + ExtDescription + '\Shell\Open\Command', True) then exit;
      try
        WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
      finally
        CloseKey;
      end;
    end;
  finally
    FreeAndNil(Reg);
  end;
  Result := true;
end;

kingflo 7. Jan 2005 12:25

Re: Datein mit meinem Programm öffnen
 
Funzt leider auch nur bei neuen Dateiendungen.
Wenn ich damit mp3 datein registrieren lasse öffnet er sie trotzdem noch mit dem windows media player

Christian Seehase 7. Jan 2005 12:40

Re: Datein mit meinem Programm öffnen
 
Moin Florian,

das hat IMHO nichts damit zu tun, ob die Extension schon existiert oder nicht, sondern damit wie sie verknüpft wird.
Schau Dir in der Registry mal an, was noch alles in den Keys für die Verknüpfung steht.
Ich vermute mal, dass die sich noch zusätzlich als Shell- oder Namespaceextension registrieren, was dann, offensichtlich, Vorrang hat :?

kingflo 7. Jan 2005 12:49

Re: Datein mit meinem Programm öffnen
 
Tatsache stimmt sone schei** mit wav funzt es sogar...

mm und nu??


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 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