Recherche association application - executable en dynamique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 467 fois - Téléchargée 37 fois

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

Ajouter un commentaire

Commentaire

rosco91
Messages postés
20
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
4 juin 2007
-
Désolé mais ton programme ne fonctionne pas. Faudrait que tu détailles plus ton code.

Pourtant il a l'air correcte!!

Bye!!

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.