AssocQueryString Windows ?

Résolu
mcallan Messages postés 17 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 28 janvier 2011 - 25 févr. 2007 à 11:50
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 2 mars 2007 à 10:09
Bonjour :)

Qu'est ce qu'il ne va pas dans ce code ?

je souhaite recuperer le nom et chemin de l'excutable associé a l'extension

Sous Windows Vista  , ptrResult contient NULL :(

char Result[2048];

exemple a=FindFileAssociation(".txt",Result);
a vaut TRUE; mais Result vaut NULL

Faut il modifier ce code pour gerer les UAC ? et comment faire ?


BOOL





FindFileAssociation
(
char
*
ptrFindStr
,
char
*
ptrResult

)
{







BOOL



bOK
=

FALSE
;


if
( (

ptrResult
) && (

ptrFindStr
) ){


HRESULT



res
=

S_FALSE
;


DWORD



cchOut
= 0;


res
=

AssocQueryString
(

ASSOCF_OPEN_BYEXENAME
,

ASSOCSTR_EXECUTABLE
,

ptrFindStr
,

"open"
,

ptrResult
, &

cchOut
);


if
(

res


S_OK
)

bOK
=

TRUE
;}


return



bOK
;
}

Merci :)

4 réponses

mcallan Messages postés 17 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 28 janvier 2011
2 mars 2007 à 10:07
Pour info. (je me repond a moi meme)

ceci fonctionne , c'etait donc  ASSOCF_OPEN_BYEXENAME

char






szDefault
[

MAX_PATH
];


DWORD



ccDefault
=

MAX_PATH
;


HRESULT



rc
=

AssocQueryString
(0,

ASSOCSTR_EXECUTABLE
,

".txt"
,

"open"
,

szDefault
, &

ccDefault
);


Merci a ceux qui ont pris le temps de lire ceci et d'y reflechir
3
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
2 mars 2007 à 10:09
salut,

met 0 à la place de ASSOCF_OPEN_BYEXENAME (ce flag indique que ptrFindStr contient le nom de l'exécutable pour trouver l'extension et non le contraire)

ShareVB
3
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
1 mars 2007 à 16:19
salut,
je pense que Vista est beaucoup plus strict sur la validation des "Buffer Overrun"...donc comme cchOut 0, il va faire comme si ptrResult NULL et renvoyer la taille requise...cependant ce n'est qu'une supposition...donc solution possible : DWORD cchOut = MAX_PATH; ou encore passer en param la taille de ptrResult...

ShareVB
0
mcallan Messages postés 17 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 28 janvier 2011
2 mars 2007 à 09:42
Apres verification ,

 DWORD cchOut = MAX_PATH;
et
ptrResult alloué de taille MAX_PATH , cela ne change rien :(

res = AssocQueryString ( ASSOCF_OPEN_BYEXENAME , ASSOCSTR_EXECUTABLE , ptrFindStr , "open" , ptrResult , & cchOut );

ptrResult retourne rien :(

Merci
0
Rejoignez-nous