Recherche association application - executable en dynamique

Contenu du snippet

Ce bout de code permet de retrouver la localisation de l'executable associée à une extension (.doc, .txt ...)
J'utilise QueryAssocString plutot que FindExecutable car cette fonction necessite de passer un nom de document existant reelement, ça m'aurait un peut fait c.... de voir crer un doc temporaire pour ça.

J'utilise un chargement dynamique (LoadLibrary) parceque je n'ai pas trouvé le .lib et .h adéquat !!! mais ça permet de traiter le cas ou la fonction n'existe pas. Ben oui, pour ceux qui sont encore dans une version IE < 5.0, cette fonction ne sera pas connue !!!! mais est-ce possible ?

Cette fonction marche aussi si on fait la recherche par guid ou par identifiant, exemple :

char result [1024];
TrouveAssociation(".doc", result);
TrouveAssociation("Word.Document.8", result);
TrouveAssociation("{AAAA ... }", result);

Source / Exemple :


typedef enum {
    ASSOCSTR_COMMAND = 1,
    ASSOCSTR_EXECUTABLE,
    ASSOCSTR_FRIENDLYDOCNAME,
    ASSOCSTR_FRIENDLYAPPNAME,
    ASSOCSTR_NOOPEN,
    ASSOCSTR_SHELLNEWVALUE,
    ASSOCSTR_DDECOMMAND,
    ASSOCSTR_DDEIFEXEC,
    ASSOCSTR_DDEAPPLICATION,
    ASSOCSTR_DDETOPIC
} ASSOCSTR;

/**************************************************************************
 *

  • But : Recherche l'executable associé à une extension ".txt", ".doc" ...
*
  • Entrées : szFindStr = localisation et nom du document
  • Sortie : szResult = localisation et nom de l'application associée
*
  • Retour : S_OK ==> association trouvée, resultat dans szResult
  • autre ==> erreur
* \**************************************************************************/ TrouveAssociation(char *szFindStr, char *szResult) { long res = S_FALSE; static HINSTANCE hDllShell = NULL; static FARPROC pfnAssoc = NULL; // Interface avec Arthic unsigned long nbrOut = 0; // Recherche de la librairie permettant de réaliser cette fonction if ( hDllShell == NULL ) { hDllShell = LoadLibrary("Shlwapi.dll"); } if ( hDllShell != NULL ) { // Recherche du pointeur sur la fonction pfnAssoc = GetProcAddress(hDllShell, "AssocQueryStringA"); if ( pfnAssoc != NULL ) { // Execution de la recherche nbrOut = 1024; res = (* pfnAssoc) (0, ASSOCSTR_EXECUTABLE, szFindStr, "open", szResult, &nbrOut); if (res != S_OK) { // Erreur détectée ... a traiter } } else { // Erreur détectée ... a traiter } } else { // Erreur détectée ... a traiter } } return res; }

Conclusion :


Pas de zip, tout le code est affiché !

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.