Dateinamenerweiterung
-
Hallo,
ich brauche mal wieder euer Wissen.
Ich möchte gerne für meine Anwendung eine eigene Dateiendung definieren.
Bsp. sollen alle Dateien mit der Endung .paul mit meinem Programm bei Doppelklick geöffnet werden.
Ich weiß, das man das irgendwo in der Registry eintragen muss, ich weiß bloß nicht wie?!Gibt es da irgendeine Funktion, wo ich einfach die Dateiendung als String übergebe und diese dann automatisch in der Registry eingetragen wird?
MfG,
Paul.
-
Siehe: Creating a File Association
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/fileassociations/fileassoc.aspFile Association Sample Scenario
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/fileassociations/fa_sample_scenarios.asp
-
Ich glaube beim Überfliegen gesehen zu haben, dass es das ist, wonach ich suche!
Danke, käme nicht darauf, unter 'associations' nachzuschauen.MfG,
Paul.P.S: Und falls es nicht das ist, dann melde ich mich wieder.
-
So, habe meine eigene Endung registriert. Doch nun kämpfe ich mit einem eigenen Icon für diese Endung!
Und zwar habe ich in meiner Endung 2 Icons angelegt. Einmal für die Anwendung selbst und einmal für die Endung.
Laut MSDN muss ich dann einen Schlüssel anlegenDefaultIcon = C:\MeinPfad\Application.exe,1
Und hier bin ich mir nicht sicher.
In this example, the icon is in the c:\MyDir\MyProgram.exe file, with an index of two. The registry entry that assigns the custom icon to all .myp files is as shown here.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
(Default) = MyProgram Application
DefaultIcon
(Default) = C:\MyDir\MyProgram.exe,2
Finally, call SHChangeNotify to notify the Shell to update its cache.Was hat es auch mit SHChangeNotify auf sich? Und wie kann ich den Index meines Icons herausfinden? Oder ist das die ID?
Wenn jemand Ahnung hat, wäre es nett, wenn diejenige/derjenige mir helfen würde.
-
Habe es gestern doch noch hinbekommen.
Falls es jemanden interessiert.
Hier ein Beispiel mit einer fiktiven Dateinamenendung .fiktiv und dem Programm MyApp.Folgendes in der Registry anlegen:
HKEY_CLASSES_ROOT\.fiktiv = MyApp.FiktiveEndung
HKEY_CLASSES_ROOT\MyApp.FiktiveEndung\shell\open\command = MyApp.exe
HKEY_CLASSES_ROOT\MyApp.FiktiveEndung\DefaultIcon = Installationspfad\MyApp.exe,0
HKEY_CLASSES_ROOT\Applications\MyApp.exe\shell\open\command = "Installationspfad\MyApp.exe" "%1"Nach dem man dies gemacht hat, war es bei mir erforderlich, den PC neuzustarten, damit er das neue Icon für die Dateierweiterung übernimmt.
MfG,
Paul.
-
Paul_C. schrieb:
Nach dem man dies gemacht hat, war es bei mir erforderlich, den PC neuzustarten, damit er das neue Icon für die Dateierweiterung übernimmt.
Und genau diesen Punkt soll das SHChangeNotify vermeiden - die Shell (=Windows System) wird darauf hingewiesen, daß sich etwas in der Registry geändert hat.
-
Ja, das stimmt. Aber ich habe die Registryeinträge nicht per Software durchgeführt. Das kommt später in einem Installationsprogramm.
Ich habe nun lediglich eine Registry-Datei benutzt.
Und da weiß ich nicht, wie man die SHChangeNotify() auslöst.
-
Das musst Du halt von Hand (also via Programm) machen...
Du kannst auch einfach den Rechner neu starten.
-
Genau, das habe ich gemacht.
Oder wie meinst du das noch per Hand?
-
Ich meinte, dass Du SHChangeNotify aufrufen musst...
-
Ah, ok.
-
Also, ich will nun das Programm so erweitern, dass, wenn ich nun eine Datei per Doppelklick öffne, diese auch bearbeitet wird.
Ich weiß, dass ich das mit den Commandline - Parametern herauslesen kann, jedoch habe ich da so das ein oder andere Problem.Ich habe eine dialogfeldbasierende Anwendung. In der OnInitDialog()-Funktion steht folgendes:
CWinApp* pcApp = AfxGetApp(); pcApp->ParseCommandLine(m_cArgs); // m_cArgs ist vom Typ CCommandLineInfo if (strlen(pcApp->m_lpCmdLine) != NULL) { m_strFilePath = m_cArgs.m_strFileName; MessageBox(m_strFilePath.GetBuffer()); // zum Testen }
Wenn ich debugge und vorher in den Debuggeroptionen den Pfad einer meiner Dateien angebe funktioniert das einwandfrei. Wenn ich aber eine Datei per Doppelklick öffne, dann scheint in dem Argument nichts zu stehen.
Übergibt er vielleicht beim Öffnen per Doppelklick doch keine Parameter? Das glaube ich jedoch nicht. Also, was mache ich falsch?
-
Ok, auch das Problem hat sich mittlerweile in Luft aufgelöst.
Ich habe lediglich den Parameter in der Registry an der falschen Stelle gesetzt.
Das '%1' muss an die andere 'command'-StelleHKEY_CLASSES_ROOT\MyApp.FiktiveEndung\shell\open\command = MyApp.exe %1 <- hier hin!!
HKEY_CLASSES_ROOT\Applications\MyApp.exe\shell\open\command = Installationspfad\MyApp.exe <- nicht hierNun klappt es!