Lancer une appli sans connaitre le chemin (path)

Remiguel - 1 août 2001 à 01:34
Remiguel Messages postés 8 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 14 novembre 2005 - 18 avril 2003 à 22:37
J'essai de lancer avec un bouton sur VB6 Photoeditor sur des machines diferantes (W95, W2000 et WNT) en plus l OS peut etre en anglais, en français ou en espagnol.
Il est donc dificile de parametrer le path dans mon projet pour chaques machines. je veux donc lancer Photoeditor sans path
Comment faire ?
Ou je pourrai faire que VB cherche Photoeditor quand je lance mon appli et copie le path de photoeditor dans un string, mais je n'ai pas trouvé comment.

Merci de votre aide

Remiguel

6 réponses

Tu peux aller chercher le path de ton application par rapport au chemin de la base de registre qui sera le même pour tous les systèmes
en général :
HKeyLocalMachine\Software\Microsoft\Windows\CurrentVersion\App Paths\...
0
Merci de ton aide, mais je ne trouve pas comment sortir (lire) les données de HKey avec VB. Je dois le mettre dans un string, mais comment ?

Remiguel
0
*********************************************************
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_DYN_DATA = &H80000004

Public Enum HCle
HKeyLocalMachine = 0
HKeyCurrentUser = 1
HKeyClassesRoot = 2
HKeyUsers = 3
HKeyDynamicData = 4
End Enum

'API nécessaires
'pour créer ou ouvrir une clé
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
(ByVal HKey As Long, _
ByVal lpSubKey As String, _
phkResult As Long) As Long
'pour lire une valeur
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
(ByVal HKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
lpType As Long, _
lpData As Any, _
lpcbData As Long) As Long

Private Function HKConvert(HK As HCle) As LongIf HK 2 Then HKConvert HKEY_CLASSES_ROOTIf HK 1 Then HKConvert HKEY_CURRENT_USERIf HK 0 Then HKConvert HKEY_LOCAL_MACHINEIf HK 3 Then HKConvert HKEY_USERSIf HK 4 Then HKConvert HKEY_DYN_DATA
End Function

Public Function LireValeur(HK As HCle, chemin As String, valeur As String) As String
' Va chercher le chemin de l'executable d'un appli
' Variables entrées : Chemin de l'appli ds la base de registre
' Variable retour : Chemin de l'exe de l'appli
Dim lng As Long
Dim Buff As Long

Buff = 0
Buff = RegCreateKey(HKConvert(HK), chemin, lng)
If Buff = 0 Then RegQueryValueEx lng, valeur, 0&, 1, 0&, Buff
If Buff < 2 Then
LireValeur = ""
Exit Function
End If
LireValeur = String(Buff + 1, " ")
RegQueryValueEx lng, valeur, 0&, 1, ByVal LireValeur, Buff
LireValeur = Left(LireValeur, Buff - 1)
End Function
*********************************************************

Copie le code précédent dans un module et utilise la fonction LireValeur: par exemple pour wordpad :

chaine = LireValeur(HKeyLocalMachine, "Software\Microsoft\Windows\CurrentVersion\App Paths\wordpad.exe", "")

Ensuite tu peux lancer un Shell avec la chaine
0
Meci bcp
J'avais deja ecris un code de façon à chercher dans C: les programmes requis (et leur path), mais cela prenait du temps à chaque demarrage du programme. Grâce à to module je peux installer mon appli sur n'importe quelle machine du reseau, sans me preocuper de savoir comment elles sont configurée. J'ai eu un petit probleme avec Photoeditor car son path n'apparait pas sur toute les machines meme s'il existe (curieux). Enfin c'est resolu

Remiguel
0

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

Posez votre question
Bishopmetz Messages postés 16 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 30 mai 2005
18 avril 2003 à 18:38
bonjour
ce code m'intéresse aussi, on met bien tout le code dans un module ?
j'ai essayé avec

chaine = LireValeur(HKeyLocalMachine, "Software\Microsoft\Windows\CurrentVersion\App Paths\hl.exe", "")
et pas moyen que ça marche, on dirait que ça ne trouve pas le path

> -------------------------------
> Réponse au message :
> -------------------------------
>
>
> *********************************************************
> Const HKEY_CLASSES_ROOT = &H80000000
> Const HKEY_CURRENT_USER = &H80000001
> Const HKEY_LOCAL_MACHINE = &H80000002
> Const HKEY_USERS = &H80000003
> Const HKEY_DYN_DATA = &H80000004
>
> Public Enum HCle
> HKeyLocalMachine = 0
> HKeyCurrentUser = 1
> HKeyClassesRoot = 2
> HKeyUsers = 3
> HKeyDynamicData = 4
> End Enum
>
> 'API nécessaires
> 'pour créer ou ouvrir une clé
> Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
> (ByVal HKey As Long, _
> ByVal lpSubKey As String, _
> phkResult As Long) As Long
> 'pour lire une valeur
> Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
> (ByVal HKey As Long, _
> ByVal lpValueName As String, _
> ByVal lpReserved As Long, _
> lpType As Long, _
> lpData As Any, _
> lpcbData As Long) As Long
>
> Private Function HKConvert(HK As HCle) As Long> If HK 2 Then HKConvert HKEY_CLASSES_ROOT> If HK 1 Then HKConvert HKEY_CURRENT_USER> If HK 0 Then HKConvert HKEY_LOCAL_MACHINE> If HK 3 Then HKConvert HKEY_USERS> If HK 4 Then HKConvert HKEY_DYN_DATA
> End Function
>
> Public Function LireValeur(HK As HCle, chemin As String, valeur As String) As String
> ' Va chercher le chemin de l'executable d'un appli
> ' Variables entrées : Chemin de l'appli ds la base de registre
> ' Variable retour : Chemin de l'exe de l'appli
> Dim lng As Long
> Dim Buff As Long
>
> Buff = 0
> Buff = RegCreateKey(HKConvert(HK), chemin, lng)
> If Buff = 0 Then RegQueryValueEx lng, valeur, 0&, 1, 0&, Buff
> If Buff < 2 Then
> LireValeur = ""
> Exit Function
> End If
> LireValeur = String(Buff + 1, " ")
> RegQueryValueEx lng, valeur, 0&, 1, ByVal LireValeur, Buff
> LireValeur = Left(LireValeur, Buff - 1)
> End Function
> *********************************************************
>
> Copie le code précédent dans un module et utilise la fonction LireValeur: par exemple pour wordpad :
>
> chaine = LireValeur(HKeyLocalMachine, "Software\Microsoft\Windows\CurrentVersion\App Paths\wordpad.exe", "")
>
> Ensuite tu peux lancer un Shell avec la chaine
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
>
>
> Merci de ton aide, mais je ne trouve pas comment sortir (lire) les données de HKey avec VB. Je dois le mettre dans un string, mais comment ?
>
> Remiguel
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> Tu peux aller chercher le path de ton application par rapport au chemin de la base de registre qui sera le même pour tous les systèmes
> en général :
> HKeyLocalMachine\Software\Microsoft\Windows\CurrentVersion\App Paths\...
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> J'essai de lancer avec un bouton sur VB6 Photoeditor sur des machines diferantes (W95, W2000 et WNT) en plus l OS peut etre en anglais, en français ou en espagnol.
> Il est donc dificile de parametrer le path dans mon projet pour chaques machines. je veux donc lancer Photoeditor sans path
> Comment faire ?
> Ou je pourrai faire que VB cherche Photoeditor quand je lance mon appli et copie le path de photoeditor dans un string, mais je n'ai pas trouvé comment.
>
>
> Merci de votre aide
>
>
> Remiguel
>
>
>
>
>
0
Remiguel Messages postés 8 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 14 novembre 2005
18 avril 2003 à 22:37
Je ne me rapel plus trop comment j'ai fait, mais tu peux regarder le code là
http://www.vbfrance.com/article.aspx?Val=2065

A+

Remiguel
0
Rejoignez-nous