AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Vorhandene Dateiendungen auf mein Programm registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vorhandene Dateiendungen auf mein Programm registrieren

Offene Frage von "Gausi"
Ein Thema von Gausi · begonnen am 22. Aug 2006 · letzter Beitrag vom 22. Aug 2006
Antwort Antwort
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#1

Vorhandene Dateiendungen auf mein Programm registrieren

  Alt 22. Aug 2006, 14:01
Zuerst: Bitte nicht hauen. Zu diesem Thema gibt es schon eine Menge Themen, wovon ich viele gelesen habe, und das eine oder andere auch nachvollziehen kann, und zur Not Copy&Paste fast reichen würde. Im DF habe ich die Frage auch schon gestellt - bisher erfolglos.

Es geht mal wieder darum, einen Dateityp auf ein eigenes Programm zu registrieren. Dabei ist es sehr wahrscheinlich, dass der Dateityp bereits registriert ist. Konkurrenzprodukte dürften z.B. der Windows-Media-Player oder Winamp sein.

Recht häufig findet man Code, der in die Regsitry unter HKEY_CLASSES_ROOT die gewünschte Dateiendung registriert. Eine sehr schöne Ausarbeitung ist wohl diese Klasse. Dafür benötigt man Admin-Rechte, wenn ich das richtig sehe.

Jetzt gibt es ja aber nicht nur diese globale Einstellung, sondern jeder User kann selbst sein Lieblingsprogramm für z.B. mp3s aussuchen. Dafür scheint es unter HKEY_CURRENT_USER/Software/Classes entsprechende Einträge zu geben, die vom Aufbau her denen unter HK_CR entsprechen (also einmal einen Eintrag für die Endung, mit einem Standardwert "Beschreibung für *.abc Dateien", und dann einen Eintrag für die Beschreibung, wo dann unter /shell/open/command die Anwendung zu finden ist.)

Super, hab ich gedacht. Das ist ja einfach. Dummerweise bin ich da auf eine Endung gestoßen, wo als Anwendung Notepad eingetragen ist, der Dateityp aber eigentlich mit einem Hexeditor verknüpft ist.
Die passende Verknüpfung fand ich dann unter HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\FileExts, wo sich unter anderem auch die "Öffnen-Mit"-Listen findet. Und bei der Suche hier im Forum bin ich dann noch auf eine Variante gestoßen, die was in HKEY_LOCAL_MACHINE\SOFTWARE\Classes reinschreibt, wo sich nochmal eine Liste mit Dateiendungen wie unter HKEY_CLASSES_ROOT findet.

Jetzt bin ich ehrlich gesagt etwas verwirrt, und weiß nicht recht, was ich wo reinschreiben soll (insbesondere der Teil ...\Explorer\FileExts ist irgendwie nicht klar ersichtlich strukturiert), damit ein normaler User bei Klick auf "Dateitypen registrieren" in meinem Programm den gewünschten Effekt erhält. Welche Angabe hat die höchste Priorität, gibt es alle Varianten bei allen Windows-Versionen (9x, ME, NT, 2000, XP), oder sind bei einigen Versionen einige gar nicht da? (Ich denke mal, dass unter 9x nur die erste zu finden ist.) Ist es OK, wenn ich ggf. nur die Werte mit geringerer Priorität schreibe, und die anderen lösche? Oder soll ich nur die mit der höheren Priorität schreiben, und somit die geringeren unwirksam machen? Nennt man das bereits "zumüllen" der Registry?

Kann mir hier einer zu etwas Durchblick verschaffen? Einfach rumexperimentieren, bis es (bei mir) klappt halte ich für unschön, da ich etwas Respekt vor einem unüberlegten Zugriff auf die Registry habe
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Vorhandene Dateiendungen auf mein Programm registrieren

  Alt 22. Aug 2006, 15:17
Moin Gausi,

das ist im Prinzip gar nicht so kompliziert wie es Dir im Moment erscheint.
Seit Windows 2000 gibt es die Zweige HKEY_CURRENT_USER\Software\Classes und HKEY_LOCAL_MACHINE\Software\Classes.
Vorher gab es nur den unter HKEY_LOCAL_MACHINE.
Der Key HKEY_CLASSES_ROOT ist kein eigener Registry-Hive, sondern zeigt nur die Daten der beiden o.g. Zweige zusammengefasst an, wobei die Daten unter HKEY_CURRENT_USER Vorrang haben. Existiert als eine Verknüpfung in beiden Zweigen, so wird der Wert des aktuellen Users angezeigt (und verwendet).
Vor Windows 2000 war HKEY_CLASSES_ROOT identisch mit HKEY_LOCAL_MACHINE\Software\Classes.

Deutlich wird das, wenn Du einfach mal von Hand etwas einträgst.
Trägst Du, z.B., unter HKEY_CLASSES_ROOT den Key .test ein, so findest Du diesen Eintrag wieder unter HKEY_LOCAL_MACHINE\Software\Classes
Jetzt kannst Du dort noch einen Wert hinzufügen (z.B. TEST mit dem Wert LOCAL), so wirst Du unter diese Änderung auch in HKEY_CLASSSES_ROOT wiederfinden.
Wenn Du jetzt noch manuell den Key .test unter HKEY_CURRENT_USER\Software\Classes hinzufügst (z.B. mit dem Wert TEST Inhalt CURRENT), so siehst Du diesen Eintrag in HKEY_CLASSES_ROOT.
Löscht Du jetzt .test in HKEY_CLASSES_ROOT, und aktualisierst, so steht dort wieder der Wert aus HKEY_LOCAL_MACHINE\Software\Classes.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Vorhandene Dateiendungen auf mein Programm registrieren

  Alt 22. Aug 2006, 16:16
Ok, danke für die Erklärung. Das bedeutet also, dass ich die Werte besser unter HKEY_CURRENT_USER eintragen sollte, oder? Zumindest dann, wenn die Windows-Version 2000 oder größer ist. Unter Windows 9x muss ich dann HKEY_CLASSES_ROOT nehmen.

Denn bei "meinen" Dateitypen ist es ja so, dass sie zu 99% aller Fälle bereits registriert sind, sodass ein Eintragen mit Admin-Rechten unter HKEY_CLASSES_ROOT (ab Windows 2000) möglicherweise gar keine Änderung bewirkt, weil bei dem aktuellen User was anderes eingetragen ist.
Wo wird dann eigentlich reingeschrieben, wenn ich HKEY_CLASSES_ROOT benutze? Einen neuen Schlüssel mit Userrechten anlegen geht da nicht - ist das in diesem Sinne immer noch gleichbedeutend mit HKEY_LOCAL_MACHINE\Software\Classes?

Dann bleibt nur noch die Frage, was mit den Einträgen unter HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\FileExts ist. Ich vermute, dass es dort sinnvoll ist, wenn ich unter z.B. \.mp3\ bei ProgID meine Beschreibung angebe (die ich unter HKEY_CURRENT_USER eingetragen habe), und einen evtl. gesetzten Application-Wert lösche. Kommt das in etwa hin?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Vorhandene Dateiendungen auf mein Programm registrieren

  Alt 22. Aug 2006, 17:30
Moin Gausi,

Zitat von Gausi:
Denn bei "meinen" Dateitypen ist es ja so, dass sie zu 99% aller Fälle bereits registriert sind, sodass ein Eintragen mit Admin-Rechten unter HKEY_CLASSES_ROOT (ab Windows 2000) möglicherweise gar keine Änderung bewirkt, weil bei dem aktuellen User was anderes eingetragen ist.
Richtig.

Zitat von Gausi:
Wo wird dann eigentlich reingeschrieben, wenn ich HKEY_CLASSES_ROOT benutze?
Mit administrativem Account unter HKEY_LOCAL_MACHINE\Software\Classes, mit eingeschränktem Account weiss ich es nicht, vermutlich würde aber versucht werden den gleichen Key zu verwenden.

Zum anderen Punkt:

FileExts:
Windows 2000 Registry: Latest Features and APIs Provide the Power to Customize and Extend Your Apps

OpenWith/OpenWithProgids:
File Types / Creating a File Association
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  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 18:52 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