AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiendung registrieren - Problem

Ein Thema von dGeek · begonnen am 25. Mär 2015 · letzter Beitrag vom 25. Mär 2015
Antwort Antwort
dGeek
(Gast)

n/a Beiträge
 
#1

Dateiendung registrieren - Problem

  Alt 25. Mär 2015, 15:51
Eigentlich habe ich das schon oft gemacht, nur komischerweise funktioniert jetzt etwas nicht mehr.

Die Dateiendung wird korrekt registriert, aber wenn ich eine Datei mit Endung "XYZ" schließlich doppelklicke, wird kein Parameter übergeben (%1).
ParamCount ist immer 1 und nicht, wie erwünscht, 2.


Ich nutze folgenden Code von Meflin.
Delphi-Quellcode:
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.620 Beiträge
 
Delphi 12 Athens
 
#2

AW: Dateiendung registrieren - Problem

  Alt 25. Mär 2015, 16:38
Wenn ParamCount 1 ist, wurde doch ein Parameter übergeben.

[edit] Übrigens ist der Code nicht so sonderlich. Zumindest sollte man einen Ressourcenschutzblock (try - finally) einbauen, ggf. mal die Rückgabewerte von OpenKey auswerten und je OpenKey ein CloseKey aufrufen.

Wie sieht es denn hiermit aus? http://delphi.about.com/cs/adptips20...ltip0801_3.htm [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (25. Mär 2015 um 16:46 Uhr)
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#3

AW: Dateiendung registrieren - Problem

  Alt 25. Mär 2015, 19:39
Ups da habe ich mich vertippt. Ich meinte natürlich 0.

Mit dem Code von about selbes Ergebnis.

Vielleicht liegt es an der VM?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.620 Beiträge
 
Delphi 12 Athens
 
#4

AW: Dateiendung registrieren - Problem

  Alt 25. Mär 2015, 19:42
Hast Du denn auch administrative Rechte?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#5

AW: Dateiendung registrieren - Problem

  Alt 25. Mär 2015, 19:47
Die habe ich, ja.
Sowohl ich als Windows-Benutzer als auch die Anwendung selber.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.620 Beiträge
 
Delphi 12 Athens
 
#6

AW: Dateiendung registrieren - Problem

  Alt 25. Mär 2015, 20:06
Ich hab das mal im Editor umgeschrieben, das ist zwar nicht sonderlich elegant, aber versuch doch mal
Delphi-Quellcode:
type
  ERegException = class(Exception);

procedure InstallExt(Extension, ExtDescription, FileDescription, OpenWith, ParamString: string; IconIndex: Integer;
  ExtVerb: string = 'open');
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    if Reg.OpenKey(Extension, True) then
      try
        Reg.WriteString('', ExtDescription);
      finally
        Reg.CloseKey;
      end
    else
      raise ERegException.CreateFmt('Schlüssel HKEY_CLASSES_ROOT\%s konnte nicht geöffnet/angelegt werden.', [ExtDescription]);
    if Reg.OpenKey(ExtDescription, True) then
      try
        Reg.WriteString('', FileDescription);
        if Reg.OpenKey('DefaultIcon', True) then
          try
            Reg.WriteString('', OpenWith + ',' + IntToStr(IconIndex));
          finally
            Reg.CloseKey;
          end
        else
          raise ERegException.CreateFmt('Schlüssel HKEY_CLASSES_ROOT\%s konnte nicht geöffnet/angelegt werden.', [FileDescription + '\DefaultIcon']);
        if Reg.OpenKey('Shell\' + ExtVerb + '\Command', True) then
          try
            Reg.WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
          finally
          end
        else
          raise ERegException.CreateFmt('Schlüssel HKEY_CLASSES_ROOT\%s konnte nicht geöffnet/angelegt werden.', [ExtDescription + '\Shell\' + ExtVerb + '\Command']);
      finally
        Reg.CloseKey;
      end
    else
      raise ERegException.CreateFmt('Schlüssel HKEY_CLASSES_ROOT\%s konnte nicht geöffnet/angelegt werden.', [FileDescription]);
  finally
    Reg.Free;
  end;
end;
Ist zwar ungetestet, sollte aber zumindest den Grund nennen, wieso es nicht klappt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


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