Voici une petite procédure pour récupérer le chemin du programme associé à une extension de fichier.

Celle ci permet par exemple d'ouvrir un document avec son application associée tout en récupérant le Processus ID (PID) de cette application, ce qui peut parfois être utile (cf ExeTermine(<Identificateur de processus>) ).

Bien qu'il soit possible d'utiliser LanceAppliAssociée("Lisezmoi.txt") pour ouvrir directement un document dans son application associée, cette fonction ne permet pas de récupérer le PID de l'application.

A la différence de LanceAppliAssociée, la fonction LanceAppli("NOTEPAD.EXE Lisezmoi.txt",exeActif,exePID) permet de lancer une application et de récupérer son PID.

Voici donc comment récupérer le PID d'une application lancée en ne connaissant que le nom du document à ouvrir :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
sDocChemin est une chaîne = ComplèteRep(fRepExe())+"Test.txt"
sDocExt est une chaîne = fExtraitChemin(sDocChemin,fExtension)
iPID est un entier
 
iPID = LanceAppli(Get_ExtensionAppliAssociee(sDocExt)+" "+sDocChemin,exeActif,exePID)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
PROCEDURE Get_ExtensionAppliAssociee(_sExtension est une chaîne,_sMessErr est une chaîne="")
 
//L'extension doit être de la forme ".txt"
 
szFichierChemin est une chaîne ASCIIZ sur 255
szFichierNom est une chaîne ASCIIZ sur 255
szProgramme est une chaîne ASCIIZ sur 255
iResult est un entier
 
iIDFiTemp est un entier
bErreur est un booléen
 
//Créer un fichier temporaire
szFichierChemin = fRepExe()
szFichierNom = DonneGUID(guidBrut)+_sExtension
 
iIDFiTemp = fCrée(szFichierNom)
SI iIDFiTemp = -1 ALORS
	_sMessErr = ErreurInfo(errMessage)
	RENVOYER Faux
FIN
 
iResult = API("SHELL32","FindExecutableA",&szFichierNom,&szFichierChemin,&szProgramme)
SELON iResult
	CAS 0
		_sMessErr = "Mémoire pleine"
		bErreur = Vrai
	CAS 31
		_sMessErr = "Pas d'association"
		bErreur = Vrai
	CAS 2
		_sMessErr = "Fichier non trouvé"
		bErreur = Vrai
	CAS 3
		_sMessErr = "Chemin non trouvé"
		bErreur = Vrai
	CAS 11
		_sMessErr = "Mauvais format"
		bErreur = Vrai
	CAS 42
	AUTRE CAS
		bErreur = Vrai
FIN
 
SI PAS fSupprime(iIDFiTemp) ALORS
	_sMessErr = ErreurInfo(errMessage)
FIN
 
SI bErreur ALORS
	RENVOYER Faux
FIN
 
RENVOYER szProgramme
Plus simplement, vous pouvez faire (si le fichier "Test.txt" se trouve dans le répertoire d'exécution) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
szFichierNom est une chaîne ASCIIZ sur 255 = "Test.txt"
szProgramme est une chaîne ASCIIZ sur 255
iResult est un entier
iPID est un entier
 
iResult = API("SHELL32","FindExecutableA",&szFichierNom,Null,&szProgramme)
SI iResult = 42 ALORS
	iPID = LanceAppli(szProgramme+" "+szFichierNom,exeActif,exePID)
FIN
Bonne prog