Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Variables d'environnement

5 réponses
Avatar
scraper
bonjour à tous !

petit problème pas trop grave, mais qui m'enquiquine ...

voila :
dans un projet, je vais lire dans le Registre le contenu d'une valeur ...
sous 9x/Me, pas de problème
mais sous XP, ce contenu est (ou peut être !) sous la forme d'une variable
d'environnement, du genre :
%UserProfile%\Toto\Docs ...etc ...

comment faire pour faire interpréter correctement cette variable
d'environnement à VB ?
actuellement, bien entendu, l'exploitation du contenu de cette valeur est
pas possible dans mon projet (je cherche à récupérer le chemin indiqué dans
cette clé) et me renvoie un dossier introuvable, si je veux l'afficher dans
l'explorateur, par exemple ...

merci de votre aide


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper

5 réponses

Avatar
ng
Salut,

Replace(strTonPath, "%UserProfile%", Environ$("UserProfile"))

Tu pourrais même faire une procédure qui généralise (recherche des %nomvar%
et remplacement automatique par la valuer de l'environnement).

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

scraper wrote:
bonjour à tous !

petit problème pas trop grave, mais qui m'enquiquine ...

voila :
dans un projet, je vais lire dans le Registre le contenu d'une valeur
... sous 9x/Me, pas de problème
mais sous XP, ce contenu est (ou peut être !) sous la forme d'une
variable d'environnement, du genre :
%UserProfile%TotoDocs ...etc ...

comment faire pour faire interpréter correctement cette variable
d'environnement à VB ?
actuellement, bien entendu, l'exploitation du contenu de cette valeur
est pas possible dans mon projet (je cherche à récupérer le chemin
indiqué dans cette clé) et me renvoie un dossier introuvable, si je
veux l'afficher dans l'explorateur, par exemple ...

merci de votre aide


Avatar
scraper
Bonjour ng
(dans news:)
tu nous disais :

Salut,

Replace(strTonPath, "%UserProfile%", Environ$("UserProfile"))



OK, merci, je vais tester ...

Tu pourrais même faire une procédure qui généralise (recherche des
%nomvar% et remplacement automatique par la valuer de
l'environnement).



ah .... :-)

pourrais tu m'en dire plus ?
en effet, ça m'intéresse, car je ne sais pas finalement si je vais
rencontrer d'autre types de variables de ce type ?

je vais reagrder dans la doc, mais bon .... si tu peux m'aiguiller c'est
avec plaisir :-)

merc i

--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
François Picalausa
Hello,

On peut aussi laisser Windows faire tout le boulot:
Private Declare Function DoEnvironmentSubst _
Lib "Shell32" _
Alias "DoEnvironmentSubstA" _
( _
ByVal pszString As String, _
ByVal cchString As Long _
) _
As Long

Private Function HIWORD(dwValue As Long) As Integer
HIWORD = (dwValue And &HFFFF0000) &H10000
End Function

Private Function LOWORD(dwValue As Long) As Integer
If dwValue And &H8000& Then
LOWORD = dwValue Or &HFFFF0000
Else
LOWORD = dwValue And &HFFFF&
End If
End Function

Public Function SubstEnv(strText As String) As String
Dim Ret As Long
Dim BufferLenght As Long

SubstEnv = strText & vbNullChar
BufferLenght = Len(SubstEnv)

Do
BufferLenght = BufferLenght + 256
SubstEnv = strText & String$(BufferLenght - Len(strText),
vbNullChar)
Ret = DoEnvironmentSubst(SubstEnv, BufferLenght)
Loop Until HIWORD(Ret)

SubstEnv = Left$(SubstEnv, LOWORD(Ret) - 1)
End Function

Exemple:
MsgBox SubstEnv("%UserProfile%TotoDocs")

--
François Picalausa

"scraper" a écrit dans le message de news:

bonjour à tous !

petit problème pas trop grave, mais qui m'enquiquine ...

voila :
dans un projet, je vais lire dans le Registre le contenu d'une valeur
... sous 9x/Me, pas de problème
mais sous XP, ce contenu est (ou peut être !) sous la forme d'une
variable d'environnement, du genre :
%UserProfile%TotoDocs ...etc ...

comment faire pour faire interpréter correctement cette variable
d'environnement à VB ?
actuellement, bien entendu, l'exploitation du contenu de cette valeur
est pas possible dans mon projet (je cherche à récupérer le chemin
indiqué dans cette clé) et me renvoie un dossier introuvable, si je
veux l'afficher dans l'explorateur, par exemple ...

merci de votre aide


Avatar
scraper
Bonjour François Picalausa
(dans news:)
tu nous disais :

Hello,

On peut aussi laisser Windows faire tout le boulot:


[...]
ça, ça me plait :-)

magique !
j'ai repris mon module modRegistry, j'y ai rajouté ça, et à chaque fois que
je lis une valeur dans le Registre, j'appelle SubstEnv(Value) ...
et ça marche !

superbe!

encore merci ...



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Jean-Marc
"François Picalausa" a écrit dans le message de
news:
Hello,

On peut aussi laisser Windows faire tout le boulot:
Private Declare Function DoEnvironmentSubst _
Lib "Shell32" _
Alias "DoEnvironmentSubstA" _
( _
ByVal pszString As String, _
ByVal cchString As Long _
) _
As Long




<snip>

Hello,

Snif, c'est si triste de laisser Windows faire le boulot :-)

Donc, pour ceux que ça amuse de voir comment faire...
Remarque:ma fonction fait tout le boulot de multiples
substitutions en un seul appel, pas de boucles externes...

'---------------------------------------------------------------------------
------------
' Function : GetCompletePath
' DateTime : 31/10/2004 11:07
' Author : Jean-Marc
' Purpose : search in the input string all %env_variable% and replace
' each occurence by the value of the environment variable
' IN : sPath - String that contains one or more %env_variable%
' OUT : sPathSolved - Result string
' iErrCode - error code if the function returns non zero
' sErrDesc - error description if the function returns non
zero
' Return : 0 if succes, -1 if an error occurs. In that case, iStatus
contains
' the error code
'---------------------------------------------------------------------------
------------
'
Public Function GetCompletePath(ByVal sPath As String, ByRef sPathSolved As
String, ByRef iErrCode As Integer, ByRef sErrDesc As String) As Integer
Dim iRet As Integer ' Function return value
Dim iPosEnvVarB As Integer ' current start pos of possible env var
Dim iPosEnvVarE As Integer ' current end pos of possible env var
Dim iStartPos As Integer ' current pos where search next '%'
Dim sEnvVar As String ' extracted env var name
Dim sEnvVarValue As String ' env var value

On Error GoTo GetCompletePath_Error

sPathSolved = sPath ' first copu in to out
iStartPos = 1 ' and init starting pos for search to 1
iPosEnvVarB = InStr$(iStartPos, sPath, "%") ' int search
' main loop
While iPosEnvVarB
iStartPos = iPosEnvVarB + 1
iPosEnvVarE = InStr$(iStartPos, sPath, "%")
If iPosEnvVarE Then
sEnvVar = Mid$(sPath, iPosEnvVarB + 1, iPosEnvVarE -
iPosEnvVarB - 1)
sEnvVarValue = Environ$(sEnvVar)
If sEnvVarValue <> "" Then
' ok we got it, replace with the value found
sPathSolved = Replace$(sPathSolved, "%" & sEnvVar & "%",
sEnvVarValue)
' ajust iStartPos
iStartPos = iPosEnvVarE + 1
If iStartPos < Len(sPath) Then ' check bounds
iPosEnvVarB = InStr$(iStartPos, sPath, "%")
Else
' end of string, force quit
iPosEnvVarB = 0
End If
Else
' let's continue with second % as first
iPosEnvVarB = iPosEnvVarE
iStartPos = iPosEnvVarE + 1
End If
Else
' only one % without next ; time to quit
iPosEnvVarB = 0 ' force quit
End If
Wend
iRet = 0 ' successfull
normal_termination:
GetCompletePath = iRet
Exit Function
GetCompletePath_Error:
iErrCode = Err.Number
sErrDesc = Err.Description
iRet = -1 ' error
Resume normal_termination
End Function

Et un petit exemple d'appel:

Dim sInput As String
Dim sResult As String
Dim iRetVal As Integer
Dim iErrCode As Integer
Dim sErrDesc As String

sInput = "%windir%toto%tutu%ComSpec%%"

iRetVal = GetCompletePath(sInput, sResult, iErrCode, sErrDesc)
If Not iRetVal Then
MsgBox "result = " & sResult
Else
MsgBox "something goes wrong in GetCompletePath() call." & vbCrLf &
_
"Error code : " & iErrCode & vbCrLf & _
"Error description : " & sErrDesc
End If


--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."