Application WIN32 lancée par un type d'extension de fichier

Résolu
cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 - 28 avril 2005 à 17:09
cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 - 28 avril 2005 à 19:41
Salut,

Bon j'ai attribué un type d'extension de fichier (.ext par exemple) à mon
application win32 par l'intermédiaire de la base de registre comme suit:

HKEY_CLASSES_ROOT \\ .ext \\ shell \\ open \\ command
pis j'ai mis le chemin de mon executable comme valeur par défaut.

Ca marche très bien, losque je click sur un fichier avec l'extension .ext, mon
appli se lance normalement.

Question: Comment mon appli win32 fait elle pour savoir qu'elle a été
ouverte par l'intermédiaire du fichier .ext et réagir en fonction ?
J'ai regardé l'état du paramètre lpcmdline de la fonction WinMain mais il reste
vide l'imbécile ; tout comme hprevinstance qui reste à zéro !

Merci d'avance si vous avez une soluce...

5 réponses

cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 3
28 avril 2005 à 19:41
Ok j'ai trouvé...c'est tout simple en fait

il suffit de placer cette seule clé:
\\ .ext \\ shell \\ open \\ command \\ (par défaut) REG_SZ C:\Appli.exe %1

et ne pas oublier le %1 et ensuite GetCommandeLine ou le paramêtre lpcmdline de la fonction WinMain renvoi bien la ligne de commande indiquant le fichier à l'origine du lancement de l'application.

Cool...

Merci de vous être penché sur le sujet.
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
28 avril 2005 à 18:20
Salut,

Tu dois ajouter une autre clé:


HKEY_CLASSES_ROOT \\ .ext \\ shell \\ open \\ ddeexec

ayant pour valeur: (par défaut) REG_SZ ("%1")

Cette deuxième clé contient deux sous-clés:

1-application = (par défaut) REG_SZ MonExe

2- topic = (par défaut) REG_SZ file

MonExe est le nom de ton exécutable (sans extension)



Dans ta WndProc, tu traites les messages suivants:

WM_DDE_INITIATE

WM_DDE_EXECUTE

WM_DDE_TERMINATE



Voici le lien MSDN:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/dynamicdataexchange.asp



Bonne programmation.
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
28 avril 2005 à 18:53
salut,

tu as deux choix :
- ouverture d'une instance de prog par fichier ouvert et possiblité d'ouverture d'un seul fichier à la fois depuis l'explorateur (même quand plusieurs sélectionnés) : regarde ce que donne l'api GetCommandLine... la ligne de commande devrait suffire...
- ouverture de plusieurs fichiers en même tant dans la même instance comme Word ou Excel, là, il faut DDE comme dit racpp (moi j'ai un source sur ça mais en Delphi...)

ShareVB
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
28 avril 2005 à 19:08
GetCommandeLine, de loin est la meilleur solution.

@+
Arnotic,
Admin CS, MVP Visual C++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Capa6T Messages postés 36 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 août 2012 3
28 avril 2005 à 19:30
GetCommandeLine ne renvoie que le chemin + Nom Complet de l'appli.... ça ne fonctionne pas ! ça marche seulement si on passe des paramètres par la ligne de commande. Pas mon cas.

par contre la piste DDE de racpp me parrait pas mal mais j'ai malheureusement un message d'erreur m'indiquant que le fichier lancé => exemple.ext est introuvable par windows.
je pense qu'il manque une clé quelque part....

sous HKEY_CLASSES_ROOT
\\ .ext \\ shell \\ open \\ command \\ (par défaut) REG_SZ 'C:\Appli.exe"
\\ .ext \\ shell \\ open \\ ddeexec \\ (par défaut) REG_SZ ("%1")
\\ .ext \\ shell \\ open \\ ddeexec \\ application \\ (par défaut) REG_SZ Appli
\\ .ext \\ shell \\ open \\ ddeexec \\ topic \\ (par défaut) REG_SZ file ???? j'ai pas compris le file

Avec ça, en cliquant sur c:\exemple.ext , j'ai un message d'erreur windows ne trouve pas c:\exemple.ext mais il lance en même temps mon application....dû à la clé command. et aucun envoi dles messages
WM_DDE_INITIATE, WM_DDE_EXECUTE, WM_DDE_TERMINATE dans mon application.
0
Rejoignez-nous