AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Heraufinden mit welchen Programmen .xyz geöffnet werden kann
Thema durchsuchen
Ansicht
Themen-Optionen

Heraufinden mit welchen Programmen .xyz geöffnet werden kann

Ein Thema von Karlson · begonnen am 3. Jan 2007 · letzter Beitrag vom 6. Jan 2007
Antwort Antwort
Karlson

Registriert seit: 12. Apr 2004
92 Beiträge
 
#1

Heraufinden mit welchen Programmen .xyz geöffnet werden kann

  Alt 3. Jan 2007, 20:25
Hi.

Zunächst einmal: Crosspost im DF, aber dort hat bisher noch niemand geantwortet, also versuch ich mal hier mein Glück

http://www.delphi-forum.de/viewtopic...=410961#410961


Ich versuche momentan eine Funktion zu finden die herausfindet mit welchen Programmen der Dateityp .xyz auf einem Computer geöffnet werden kann. Sprich einfach eine Liste der Programme des "öffnen mit..." Menüs.

Ich habe einen Key gefunden der mit schon ziemlich weit bringt:

HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\FileExts\.bmp\OpenWithList

In diesem Key sind z.B. die Programme hinterlegt, die im Öffnen mit...-Dialog einer .bmp Datei auftauchen.

Das Problem ist: Hier finde ich lediglich die Exenamen der Programme. Da ich die Dateien evt. mit Shellexecute mit einem anderem als dem Standartprogramm öffnen will, brauche ich den kompletten Pfad und das Schema nach dem der Öffnen-Parameter übergeben wird.

Diesen Key habe ich scheinbar zwar auch gefunden, aber seht selbst:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Photoshop.BMPF ile.9 Hier finde ich z.B. den Pfad zum Default-Icon sowie den Pfad der Datei inklusive dem Kommando zum Öffnen einer Datei, in diesem Fall z.B:
C:\Programme\Adobe\Adobe Photoshop CS2\ImageReady.exe "%1"

Das Problem ist nur das diese Key-Namen (z.B. Photoshop.BMPFile.9) unmöglich von einer automatischen Routine gefunden werden können! Auch Windows dürfte das doch nicht hinbekommen. Da fehlt mir noch irgendeine Zwischenliste in der gespeichert wird in welchen Keys die Informationen für das jeweilige "Öffnen mit..."-Programm gespeichert sind. Doch genau diese Zwischenliste in der Registry suche ich
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Heraufinden mit welchen Programmen .xyz geöffnet werden

  Alt 3. Jan 2007, 20:44
Hallo,

das fehlende Bindeglied ist der default Eintrag bei der Extension im hive HKEY_CLASSES_ROOT. Du suchst im Hive zuerst deine Extension, nimmst deren default entry (ProgID) und suchst dann diesen. Im shell subkey findest du dann das Verb open und im command subkey des Verbs den Verweis auf das Programm, welches zum Öffnen der Datei benutzt werden kann.

Gute Nacht
  Mit Zitat antworten Zitat
Karlson

Registriert seit: 12. Apr 2004
92 Beiträge
 
#3

Re: Heraufinden mit welchen Programmen .xyz geöffnet werden

  Alt 4. Jan 2007, 00:06
Hi!

Vielen Dank für die Antwort.

Dein Weg funktioniert, doch es scheint nicht genau das Bindeglied zu sein das ich suche.

Ich bleibe mal einfach am Beispiel .bmp!

Der Default-Key ist hier Paint.Picture.

In HKEY_CLASSES_ROOT finde ich wieder den Key Paint.Picture, im Shell subkey steht unter Command dann aber nur der Command des Standartprogramms. In meinem Fall: rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscre en %1

Das ist die Windows Bild und Fax Anzeige. Das ausführen dieses commands ist ja eigentlich unnötig, da Shellexecute nichts anderes tut! Ich bräuchte aber die Commands aller Programme die im "Öffnen mit..." Dialog vorkommen.

Im Paint-Picture-Key sind aber nur die Commands für die Optionen des Kontextmenüs "Edit" und "Open" hinterlegt. Der Subkey "OpenWith" fehlt leider!

Es tut mir leid das ich nicht eigenständiger arbeiten kann, aber mir fehlt hier wirklich einfach der Key. Ich suche jetzt schon seit Stunden nach .bmp in der Reg. Aber es ist nichts dabei was mir hilft!

Dennoch vielen Dank!
gruss Stephan
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Heraufinden mit welchen Programmen .xyz geöffnet werden

  Alt 4. Jan 2007, 06:52
Hallo Stephan,

ich habe das Problem etwas näher betrachtet und feststellen müssen, dass die Shell einen direkten Weg für die Population des Kontextmenüeintrags "Öffnen mit ..." verwendet. Alles verbirgt sich hinter dem Schlüssel HKCU:\Software\Classes.

Freundliche Grüße
Angehängte Dateien
Dateityp: zip reg-openwith_769.zip (2,2 KB, 36x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Heraufinden mit welchen Programmen .xyz geöffnet werden

  Alt 4. Jan 2007, 17:11
Wie bedient man das?
Bei mir zeigt das Programm gar nichts an...

Egal was ich in der ComboBox auswähle mit anschließendem Button klick, ich bekomme nichts im Grid angezeigt...

Bye Christian
Christian
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Heraufinden mit welchen Programmen .xyz geöffnet werden

  Alt 4. Jan 2007, 17:26
Hallo Christian,

ich habe es mir für den Demo-Code leicht gemacht und einfach alle extensions in die ComboBox eingestellt, auch wenn sie gar keine assoziierte OpenWithList besitzen. Sobald du einen Eintrag auswählst, der eine assoziierte OpenWithList aufweist, sollten die Programme im ValueListEditor aufgelistet werden. Wähle doch mal die extensions aus, von denen du sicher weißt, dass sie das Untermenü "Öffnen mit..." mitbringen.

Ehrlich gesagt hatte ich nicht daran gedacht, dass jemand das Programm ohne Ansehen des Codes kompiliert und ausführt. Die wenigen Zeilen Code sollten eigentlich zeigen, wie der Zugriff auf die Liste funktioniert.

Freundliche Grüße

Nachtrag:

Wenn der Eintrag shell\open\command unter HKCR:\Software\Classes\.pdf fehlt, dann steht stattdessen ein application name dort, der auf \Software\Applications verweist. Dort ist dann der Eintrag shell\open\command zu suchen um den Speicherort der application zu ermitteln. Außerdem lese ich nur beispielhaft im hive HKCR. Oft stehen zusätzliche Einträge im hive HKLM.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Heraufinden mit welchen Programmen .xyz geöffnet werden

  Alt 4. Jan 2007, 17:39
Ich habe genau 17 Einträge dort und ich finde auch keinemir bekannte Extension...

Nunja und den Code habe ich mir angeschaut, dachte mir ok, gestartet und alles leer...
Hab anschliessend in Regedit nachgeschaut wo du ausliest...

Habe dir gleichmal ein Screenshot mitgeschickt, da siehst auch die 17 Werte, die ich da sehe..

Bye Christian

Nachtrag:
Zitat von marabu:
... Wenn der Eintrag shell\open\command unter HKCR:\Software\Classes\.pdf fehlt, dann steht stattdessen ein application name dort, der auf \Software\Applications verweist. Dort ist dann der Eintrag shell\open\command zu suchen um den Speicherort der application zu ermitteln. Außerdem lese ich nur beispielhaft im hive HKCR. Oft stehen zusätzliche Einträge im hive HKLM.
Gut, die Weisheit kommt mir aber nicht zugeflogen, das stand da eben nicht, dass man ebenfalls da nachschauen sollte...

Ich schau nochmal drüber, falls noch fragen kommen melde ich mich.
Miniaturansicht angehängter Grafiken
hcu_software_classes_315.jpg  
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Heraufinden mit welchen Programmen .xyz geöffnet werden

  Alt 4. Jan 2007, 18:07
Öhm über HCLM komm ich auch nicht ran...

Habe mal statt Screeny exportiert:

Code:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdf]
@="AcroExch.Document"
"Content Type"="application/pdf"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdf\OpenWithList]
@=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdf\OpenWithList\AcroRd32.exe]
@=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pdf\PersistentHandler]
@="{B7509D6F-85EE-11d0-AF7D-00C04FD8DC02}"
Code:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\AcroRD32.exe]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\AcroRD32.exe\shell]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\AcroRD32.exe\shell\Read]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\AcroRD32.exe\shell\Read\command]
@="\"C:\\Programme\\Adobe\\Acrobat 7.0\\Reader\\AcroRd32.exe\" \"%1\""
Da komm ich zum Acrobat Reader, wie ich zu den anderen Programmen komme, die in der "Öffnen mit" Liste stehen ist mir noch schleierhaft

Bye Christian
Christian
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Heraufinden mit welchen Programmen .xyz geöffnet werden

  Alt 4. Jan 2007, 18:54
Hallo Christian,

du darfst den Catch-All Eintrag * nicht vergessen. Wenn ich die beschriebenen Wege in Betracht ziehe komme aber auch ich nicht an alle Einträge heran - z.B. FireFox fehlt mir noch, obwohl der bei mir definitiv als PDF-Handler definiert ist. Da werde ich wohl noch ein Weilchen drüber grübeln müssen.

Die Einträge unter ...Explorer\FileExts legen wohl lediglich die Reihenfolge der Einträge in den Listen fest, welche im Dialog "Programm Auswählen..." erscheinen.

Dein Ansatz aus deinem eigenen thread über den Schlüssel HKCR:\Applications ist übrigens sehr clever, da dort die Einträge aus den Zweigen HKCU:\Classes und HKCU:\Classes\Applications zusammen mit den entsprechenden aus dem hive HKLM zu sehen sind. So braucht man dann nur in dem Pseudo-Hive HKCR zu operieren.

Freundliche Grüße

Nachtrag nach kurzem Literaturstudium:

Nicht direkt auffindbare Einträge könnten sich hinter einem ContextMenuHandler verbergen. Da wächst dann der Aufwand zur Ermittlung noch etwas an.
  Mit Zitat antworten Zitat
Karlson

Registriert seit: 12. Apr 2004
92 Beiträge
 
#10

Re: Heraufinden mit welchen Programmen .xyz geöffnet werden

  Alt 6. Jan 2007, 15:44
Hi Marabu.

Erst mal vielen Dank dafür, dass du dich so ausführlich damit beschäftigt hast!

Dein beschriebener Weg reicht mir schon! Vielen dank nochmal.
  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 16:43 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