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
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 ...
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 ...
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 ...
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
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
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
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
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" <scraper@pasdespam.fr> a écrit dans le message de news:
eamM40yvEHA.2316@TK2MSFTNGP15.phx.gbl
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 ...
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
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
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
Bonjour François Picalausa
(dans news:OES3VBzvEHA.164@TK2MSFTNGP10.phx.gbl)
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
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
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."
"François Picalausa" <fpicalausa@chez.com> a écrit dans le message de
news:OES3VBzvEHA.164@TK2MSFTNGP10.phx.gbl...
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."
"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."