Seite 1 von 1
Verknüpftes Programm finden
Verfasst: 10.11.2008 19:00
von Lord
Hallo!
Das mit einem bestimmten Dateityp verknüpfte Programm läßt sich ja mittels FindExecutable_() finden:
Code: Alles auswählen
File.s="Beispiel.txt"
FileDir.s="C:\"
ExePfad.s=Space(#MAX_PATH)
FindExecutable_(File,FileDir,@ExePfad)
Debug ExePfad
Nun besteht aber die Möglichkeit, daß mehrere Programme mit einem Dateityp verknüpft sein können. Ich meine damit die Einträge, die im Explorerkontextmenü bei einem Rechtsklick auf eine Datei oder auf einen Ordner angezeigt werden.
Wie lassen sich jetzt diese zusätzlichen Programme und die Programmpfade dahin feststellen?
Verfasst: 15.11.2008 16:41
von Lord
Hm, alle API-Experten scheinen sich schon in den Winterurlaub verabschiedet zu haben.
Sollte es eine Lösung für das obige Problem ohne Einsatz einer API geben, bin ich natürlich daran auch interessiert.

Verfasst: 15.11.2008 17:13
von TomS
Das steht in der Registry.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\OpenWithList
Wie man am darauf zugreifen kann, dafür müsste es Beispiele im CodeArchiv und auch im Board geben.
Verfasst: 16.11.2008 16:07
von Lord
TomS hat geschrieben:Das steht in der Registry.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\OpenWithList
Wie man am darauf zugreifen kann, dafür müsste es Beispiele im CodeArchiv und auch im Board geben.
Das war schon mal ein wichtiger Hinweis.
Leider ist es nicht ganz genau das, was ich suche.
In dem angesprochen Registry-Eintrag sind die Einträge vermerkt, die im Kontextmenüeintrag "Öffnen mit..." erscheinen. Desweiteren beinhalten sie auch keine Pfadangaben.
Ich suche nach den Einträgen, die zusätzlich zu "Öffnen mit...", also eine Ebene höher, erscheinen, sowohl bei einem Rechtsklick auf eine Datei als auch bei einem Ordner.
Verfasst: 16.11.2008 16:34
von TomS
Achso. Mein Fehler. Steht auch in der Registry, nur in nem anderen Schlüssel. Musst dich mal durchwühlen.
Zum Thema Pfadangaben: Wenn das Programm installiert ist steht der Pfad auch in der Registry (irgendwo anders, gab auch mal nen Code um den Installationspfad eines Programms herauszufinden, nur bin ich irgendwie zu blöd, die richtigen Wörter in die SuFu einzutippen

)
Wenn das Programm nicht installiert ist (Portable Versionen, die man einfach nur entpackt), dann steht der Pfad dabei. Oder es ist ein Systemprogramm. (Paint, Notepad etc). Dann ist der Pfad sowieso überflüssig, weil er in der %PATH%-Variable enthalten ist.
Verfasst: 25.11.2008 22:22
von Lord
So, nach längerer Suche habe ich im MSDN die Funktion AssocQueryString gefunden:
http://msdn.microsoft.com/en-us/library/bb773471.aspx
Wenn ich das halbwegs richtig verstanden habe, könnte das ein Aspirant für eine Lösung meines Problems sein.
Deshalb jetzt eine Bitte an die Experten: wie setze ich das C-Beispiel
HRESULT AssocQueryString(
ASSOCF flags,
ASSOCSTR str,
LPCTSTR pszAssoc,
LPCTSTR pszExtra,
LPTSTR pszOut,
DWORD *pcchOut
);
in PureBasic um?
Speziell die Bemerkung
Notes
The ANSI version is broken in Windows XP; use the Unicode version instead.
With Windows Vista, you have to add ASSOCF_IGNOREUNKNOWN to the flags parameter. Otherwise, if a file type is not registered it may return you information about the "Unknown" application instead of just fessing up and admitting nothing is registered.
in diesem Forum:
http://www.jose.it-berater.org/smfforum ... pic=1008.0
gibt mir zu denken.
Verfasst: 26.11.2008 13:31
von Lord
Im Zusammenhang mit der Suche nach dem richtigen Einsatz der API-Funktion AssocQueryString() habe ich mir auch die Datei APIFunctionListing.txt angesehen, da PureBasic nicht auf die Eingabe von 'AssocQueryString_()' im Editor reagierte.
Dabei sind mir zwei Dinge aufgefallen:
1. Die Funktion 'AssocQueryString()' ist in der Datei nicht aufgeführt.
Diese ist vermutlich der Grund, warum PB sie nicht erkennt.
2. Der erste Eintrag in obiger Textdatei ist die Zahl 7248.
Die Textdatei selber umfaßt 7244 Zeilen, einschließlich der ersten Zeile mit der Zahl und einer Leerzeile zum Schluß.
Meine Fragen dazu:
Ist die gesuchte Funktion auf Grund der fehlerhaften XT-Implementation nicht in PB aufgenommen worden?
Fehlen in der API-Liste einige Einträge oder hat die Diskrepanz Zahl zu Einträgen keine Bedeutung?