Wie bekomme ich den Namen des Programms, verbunden mit einer Erweiterung mit Delphi?
Ich brauche, um den Namen des Programms, das derzeit im Zusammenhang mit einer Datei-extension für den aktuellen Benutzer. Wenn Sie mit der rechten Maustaste auf eine Datei klicken und Eigenschaften auswählen, dann das, was ich brauche, ist der name des Programms, das rechts von "Öffnen mit" - Zeile.
z.B. Für ".xls", ich möchte in der Lage sein, um die Antwort zu bekommen "Microsoft Office Excel", oder was auch immer Programm, das der Benutzer hat sich als Standard-Programm zu öffnen .xls-Dateien.
Habe ich festgestellt es ist nicht so einfach wie nur geht in HKEY_CLASSES_ROOT und Kommissionierung es aus, denn es kann auch angegeben werden, in HKEY_LOCAL_MACHINE oder in HKEY_CURRENT_USER oder HKEY_USERS.
Vielleicht ist alles, was ich wissen müssen, ist die Hackordnung von Windows verwendet, um dies zu bestimmen und wie man zu jedem der Standorte. Natürlich, eine Windows-API-Aufruf zu tun, das wäre ideal.
Dies ist eine ähnliche Frage:
Wie man das Symbol und die Beschreibung von Datei-Erweiterung mit Delphi? aber, dass die Frage nur beantwortet, wie man die Beschreibung der Erweiterung und das Symbol des zugehörigen Programms. Ich konnte nicht einen Weg finden, zu erweitern, dass auch der name des zugehörigen Programms.
Ich bin mit Delphi 2009 und brauchen eine Lösung, die funktioniert unter Windows XP, Vista und 7.
Danke Euch allen für Eure Antworten.
Scheint es meine überzeugung, dass der name der ausführbaren Datei nicht in der Registrierung, nachdem alle. Und nach der Suche rund um ausgiebig für eine Windows-API geben, der den Namen konnte ich nicht finden.
Ich denke, Mef Antwort, dann ist die beste. Um den Namen der ausführbaren Datei, aus der Informationen in die ausführbare Datei des Programms.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schritt 1
Bekommen die ausführbare Datei, die zugeordnet ist, um eine Datei-Erweiterung, zum Beispiel mit der folgenden Funktion:
(Siehe hier, oder marc_s' anwser zu dieser Frage 🙂
Schritt 2
Nun können Sie Lesen den Namen des Programms, aus der Informationen zur version von diesem Programm! Der einfachste Weg ist mit dem TVersionInfo Klasse, die Sie finden können über Google, zum Beispiel hier.
Allerdings müssen Sie sich bewusst sein, dass einige Programme verwenden die Beschreibung Schlüssel daher (wie RAD Studio selbst oder MS Excel), während andere verwenden den Produkt-name Schlüssel...
SE_ERR_NOASSOC
), wenn es keine Vereinigung. Bei Erfolg gibt es einen Pfad zum jeweiligen ausführbaren Datei. View stackoverflow.com/a/9540278/206730Nicht stöbern in der registry, wenn es API-Funktionen entwickelt, um zu tun, was Sie brauchen.
In Ihrem Fall, Sie wollen
AssocQueryString
. Geben Sie der Datei-Namen-Erweiterung, und es wird Ihnen sagen, Ihre registrierte Programm zu handhaben, dass die Verlängerung (AssocStr_Executable
). Wenn Sie planen, in läuft, dass das Programm um ein Dokument zu öffnen, dann werden Sie wirklich wollen, den Befehls-string, anstatt nur die ausführbare Datei;AssocQueryString
Ihnen geben kann, dass, zu (AssocStr_Command
). Es kann Ihnen auch sagen, die Art des Dokuments, wie, was im Windows Explorer angezeigt, wie Sie "Text-Dokument" oder "Zip-Archiv" (AssocStr_FriendlyDocName
).Dass API-Funktion ist ein wrapper für die
IQueryAssociations
- Schnittstelle. Wenn Sie auf der Suche nach Programmen, die aus vielen Datei-Typen, oder eine Menge von strings assoziiert mit einer einzigen Art, möchten Sie vielleicht zu instanziieren, die Schnittstelle und re-verwenden Sie es anstelle von Aufruf der API-Funktion, über und über.Delphi kommt mit einem unit ShellApi.pas, die verwendet wird, in den folgenden Beispielcode. Die Datei muss existieren.
Hier ist, wie es zu benutzen:
Ich denke, dass Sie brauchen, um zu kombinieren Mef ' s und Rob Kennedy Antworten.
Nehmen Rob Kennedy 's Antwort und nehmen Schritt 2 von Mef' s Antwort. Lesen Registrierung auch direkt ist keine gute Sache zu tun, so sollten Sie wegwerfen, seinen Teil 1.
AssocQueryString gibt nicht nur freundliche Namen für die Datei geben (ASSOCSTR_FRIENDLYDOCNAME), aber es kann auch den Namen der ausführbaren Datei öffnen (ASSOCSTR_EXECUTABLE) - das ist das, was Sie brauchen.
Sogar mehr als das: ich bin mir nicht sicher, aber kann sein ASSOCSTR_FRIENDLYAPPNAME wird, die Ihren Bedürfnissen entsprechen. In diesem Fall können Sie nur verwenden, Rob Kennedy ' s Antwort.
Dem problem mit dem Auslesen der registry direkt, dass es möglicherweise zurück, falsche info. Das ist, weil Sie Lesen system-Einstellungen - das ist, was die Anwendung registriert. Aber der Benutzer kann dies außer Kraft setzen. Zum Beispiel, kann er rechts auf klicken .xls und wählen Sie "Öffnen mit..." -> "Andere app". -> "OpenOffice" -> "mit dieser app immer". Anmeldung zur info .xls-Typs nicht verändert werden (Benutzer-Einstellungen werden gespeichert, in separaten Platz, so dass apps nicht Durcheinander mit Ihnen), sodass Ihr code (die liest registry-direkt) wird auch weiterhin zu produzieren "MS Excel", obwohl, wenn Benutzer einen Doppelklick auf die Datei - OpenOffice gestartet werden.
Wie über diesen Artikel hier: Die Bestimmung der zugehörigen Anwendung
In dem konkreten Fall von Excel finden Sie die
.xls
Endung unter HKEY_CLASSES_ROOT - der Standardwert für diesen Eintrag istExcel.Sheet.8
.Wenn Sie zu gehen suchen für
Excel.Sheet.8
wieder in HKEY_CLASSES_ROOT findest du ein Eintrag mit einem Standard-Wert vonMicrosoft Office Excel 97-2003 Worksheet
- das ist wahrscheinlich so gut wie es geht.HKEY_CLASSES_ROOT\Excel.Sheet.12
(referenziert durchHKEY_CLASSES_ROOT\.xlsx
), wirklich[HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command]
und ich bekomme@="\"C:\\Program Files\\Microsoft Office 15\\Root\\Office15\\EXCEL.EXE\" /dde"
Wert.HKEY_CLASSES_ROOT\.xlsx\Excel.Sheet.12
hat Wert REG_SZ Dateinamen wie C:\Program Files\Microsoft Office 15\Root\VFS\Windows\ShellNew\excel12.xlsx[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Extensions]
hat"xlsx"="C:\\Program Files\\Microsoft Office 15\\Root\\Office15\\EXCEL.EXE"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.xlsx\OpenWithList]
hat"a"="EXCEL.EXE"
und[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.xlsx\OpenWithProgids]
hat"Excel.Sheet.12"=hex(0):
Wenn der Benutzer sagt "verwenden Sie diese app immer" für .xls-Dateien die info ist gespeichert in
Den Schlüssel hat der Eintrag "Anwendung" enthält den Namen der Anwendung (z.B. "soffice.exe"). Es korreliert zu einem Applcication Schlüssel in HK_CR, z.B.
HK_CR\Applications\soffice.exe\
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.xlsx
hat OpenWithList und OpenWithProgids