Home » Tutorials » VCL » Registry

Registry

Eigene Dateiendungen registrieren

Jeder kennt das: Legt man in einer Anwendung eigene Dateien an, bekommen diese eine bestimmte Endung, über die ihr Typ zu erkennen ist. DOC ist z.B. ein Word-Dokument. Über Doppelklick im Explorer wird dann automatisch die richtige Anwendung gestartet und die Datei darin geöffnet. Dazu ist Folgendes nötig:
Als erstes denken wir uns eine Dateiendung aus (muss nicht mehr unbedingt dreistellig sein, auch vierstellig ist möglich) – diese Endung sollte auf jeden Fall nicht bereits weit verbreitet, sondern auf den Zielrechnern möglichst eindeutig sein.
Zur Registrierung der Endung (nehmen wir als Beispiel „ABC“) muss Folgendes in die Registry eingetragen werden:

HKEY_CLASSES_ROOT.abc

Vor der Endung abc muss ein Punkt stehen. Ist dieser Schlüssel angelegt, muss sein Standardwert verändert werden. Schaut man sich die Einträge in der Registry an, sieht man, dass jeder Schlüssel als ersten Eintrag einen Wert namens „(Standard)“ besitzt, meist mit dem Inhalt „(Wert nicht zugeordnet)“. Um aus Delphi heraus diesen Standardwert zu verändern, darf als Bezeichner nicht „(Standard)“ angegeben werden, sondern der Bezeichner muss ein leerer String sein:

regist.WriteString('', 'MeinProgramm');

Das liegt daran, dass „(Standard)“ nur ein Anzeigewert ist. Der eigentliche Schlüsselname ist ein Leerstring, den man bei der Anzeige aber schlecht sieht.
Bei dem Wert, der dem Standardeintrag zugeordnet wird, muss es sich ebenfalls um einen eindeutigen String handeln. Scrollt man in der Registry im Schlüssel HKEY_CLASSES_ROOT weiter nach unten, so folgen nach den Endungen, die alle mit einem Punkt beginnen, diese Bezeichner. Wie folgt sind nun Schlüssel und Werte anzulegen:

HKEY_CLASSES_ROOTMeinProgramm
 (Standard)="Dateityp-Beschreibung"
HKEY_CLASSES_ROOTMeinProgrammDefaultIcon
 (Standard)="c:test.exe,1"
HKEY_CLASSES_ROOTMeinProgrammShellOpen
 (Standard)="Öffnen"
HKEY_CLASSES_ROOTMeinProgrammShellOpenCommand
 (Standard)="c:test.exe "%1""

Was hier mit „Dateityp-Beschreibung“ angegeben ist, ist der Text, der auch im Explorer angezeigt wird, wenn Detailansicht eingestellt ist.
DefaultIcon ist einfach der vollständige Pfad auf ein Symbol, das allen Dateien mit der Endung abc zugeordnet werden soll. Falls sich das Symbol nicht in einer getrennten ico-Datei befindet, sondern in der EXE-Datei, kann über Nummerierung darauf zugegriffen werden wie oben.
Die dritte Zeile definiert das Kommando „Öffnen“. Der beschreibende Text stellt den obersten Eintrag des Kontextmenüs im Explorer dar, wenn mit der rechten Maustaste auf den Dateinamen geklickt wird.
Als letztes schließlich der Kommandozeilenbefehl, um die eigene Anwendung zu öffnen. „%1“ bewirkt, dass der Name der Datei, die mit der Anwendung geöffnet werden soll, der Anwendung als Parameter übergeben wird – die Anführungszeichen sind nötig, um lange Pfade, die Leerzeichen enthalten, nicht beim Leerzeichen abzuschneiden. Wird %1 weggelassen, wird bei jedem Doppelklick auf eine abc-Datei zwar test.exe gestartet, die abc-Datei jedoch nicht geöffnet.
%1 alleine reicht natürlich auch nicht. Damit hat man den Dateinamen jedoch im Programm und kann dort im OnCreate-Ereignis über ParamCount und ParamStr prüfen, ob ein Dateiname übergeben wurde und diese Datei dann laden. Mehr zur Behandlung von Parametern in unserer Rubrik „Tipps & Tricks“, Abschnitt „Delphi-Sprache“.
Neben einem „Open“-Kommando kann auch ein „Print“-Kommando festgelegt werden, so dass Dateien mit dieser Endung direkt aus dem Kontextmenü im Explorer ausgedruckt werden können.