Verknüpftes Programm finden

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Lord
Beiträge: 325
Registriert: 21.01.2008 19:11

Verknüpftes Programm finden

Beitrag 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?
Bild
Lord
Beiträge: 325
Registriert: 21.01.2008 19:11

Beitrag 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. :wink:
Bild
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag 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.
Lord
Beiträge: 325
Registriert: 21.01.2008 19:11

Beitrag 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.
Bild
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag 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 :roll: )
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.
Lord
Beiträge: 325
Registriert: 21.01.2008 19:11

Beitrag 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.
Bild
Lord
Beiträge: 325
Registriert: 21.01.2008 19:11

Beitrag 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?
Bild
Antworten