Trouver le chemin de Vb

Résolu
BUZZ2K Messages postés 64 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 septembre 2008 - 6 juin 2005 à 14:46
BUZZ2K Messages postés 64 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 septembre 2008 - 8 juin 2005 à 19:20
Bonjour,

pour mon appli, je fait appel a VB6.exe dans un Shell, le pb c'est que
le chemin n'est pas le meme sur tt les poste, il faudrait donc que je
trouve le chemin de vb avant d'en faire appel.

En cherchant sur le forum j'ai trouver sa:



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



Apres il faut appeller la fonction lireValeur avec certain parametres,
le pbc'est que je n'arrive pas a m'en servir, et que de plus dans la
base de registre

je n'arrive pas a trouver VB (manuellement)

Si quelqu'un sait comment faire , Merci beaucoup !

4 réponses

redblast Messages postés 27 Date d'inscription mercredi 20 octobre 2004 Statut Membre Dernière intervention 27 juin 2005
6 juin 2005 à 15:21
Salut



Tu peux je pense le retrouver comme ca (en tout cas ca marche pour-moi,
par contre j'ai pas utilisé la même fonction pour lire dans la bdr) :



Dim CheminVB as string

CheminVB = LireValeur(HKeyClassesRoot ,"Applications\vb6.exe\shell\make\command",vbnullstring)

CheminVB = Mid(CheminVB, 1, InStr(UCase(CheminVB), "VB6.EXE") - 1)
3
BUZZ2K Messages postés 64 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 septembre 2008
6 juin 2005 à 15:50
Merci mec sa marche, apparement je cherchait pas au bon endroti dans la
Bdr, par contre par curiosité, tu utilise quoi comme fonction pour
chercher dans la Bdr ?

Thx A Lot en tt cas !
0
redblast Messages postés 27 Date d'inscription mercredi 20 octobre 2004 Statut Membre Dernière intervention 27 juin 2005
8 juin 2005 à 13:15
Pour la fonction, j'utilise un module que j'ai commencé à créer pour
lire dans la bdr, c'est le même principe que ta commande, regarde:



Public Function RegRead(Key As String) As Variant

Dim KeyPtr As Long, RootKey As Long, subKey As String, KeyValue As String

Dim KeyBuff As String * 400, KeyBuffLng As Long, KeyBuffInt As Integer, KeyBuffLen As Long, DataType As Long

KeyBuffLen = 400

RootKey = GetRootKey(Key)

subKey = Mid(Key, InStr(Key, "") + 1)

If Right(Key, 1) = "" Then

RegOpenKeyEx RootKey, subKey, 0, KEY_ALL_ACCESS, KeyPtr

KeyValue = ""

Else

For A% = Len(subKey) To 1 Step -1

If Mid(subKey, A%, 1) = "" Then

KeyValue = Mid(subKey, A% + 1)

subKey = Mid(subKey, 1, A%)

RegOpenKeyEx RootKey, subKey, 0, KEY_ALL_ACCESS, KeyPtr

Exit For

End If

Next A%

End If

RegQueryValueEx KeyPtr, KeyValue, 0, DataType, 0, 0

Select Case DataType

Case REG_SZ, REG_EXPAND_SZ

RegQueryValueExStr KeyPtr, KeyValue, 0, DataType, KeyBuff, KeyBuffLen

For A% = 1 To Len(KeyBuff)

If Mid(KeyBuff, A%, 1) Chr(0) Then RegRead Left(KeyBuff, A% - 1): Exit For

Next A%

Case REG_DWORD

RegQueryValueEx KeyPtr, KeyValue, 0, DataType, KeyBuffLng, Len(KeyBuffLng)

RegRead = KeyBuffLng

Case REG_BINARY

RegQueryValueEx KeyPtr, KeyValue, 0, DataType, KeyBuffInt, Len(KeyBuffInt)

RegRead = KeyBuffInt

End Select

RegCloseKey KeyPtr

End Function

Private Function GetRootKey(Key As String) As Long

If Left(Key, 17) "HKEY_CURRENT_USER" Or Left(Key, 4) "HKCU" Then GetRootKey = HKEY_CURRENT_USER

If Left(Key, 18) "HKEY_LOCAL_MACHINE" Or Left(Key, 4) "HKLM" Then GetRootKey = HKEY_LOCAL_MACHINE

If Left(Key, 17) "HKEY_CLASSES_ROOT" Or Left(Key, 4) "HKCR" Then GetRootKey = HKEY_CLASSES_ROOT

If Left(Key, 10) "HKEY_USERS" Then GetRootKey HKEY_USERS

If Left(Key, 19) "HKEY_CURRENT_CONFIG" Then GetRootKey HKEY_CURRENT_CONFIG

If Left(Key, 21) "HKEY_PERFORMANCE_DATA" Then GetRootKey HKEY_PERFORMANCE_DATA

If Left(Key, 13) "HKEY_DYN_DATA" Then GetRootKey HKEY_DYN_DATA

End Function



J'ai pas mis les déclarations (c'est déjà bien long). J'ai fait le
module de telle manière qu'il fonctionne de la même façon que les
commades WhShell (regread, regwrite etc...).



Avec ton code, ca aurait donné:



Dim CheminVB as string

CheminVB = RegRead("HKCR\Applications\vb6.exe\shell\make\command")

CheminVB = Mid(CheminVB, 1, InStr(UCase(CheminVB), "VB6.EXE") - 1)



Je le mettrai sur VBF lorsqu'il sera fini (avec des commantaires).

(ps: je repond maintenant car connexion internet harsardeuse en ce moment...)
0
BUZZ2K Messages postés 64 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 septembre 2008
8 juin 2005 à 19:20
Oki, ben je matterai ta source, car c'est supers pratik sa de checker la Bdr, jvien de decouvrir pr mon prog la, c pratik pr les shell (dans mon cas...)
Encore merci !
0
Rejoignez-nous