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

Variables d'environnement

5 réponses
Avatar
Aski
Bonjour,

En voulant utiliser un chemin d'accès contenu dans le registre et comportant
une variable d'environnement, je constate que, sur Xp cela passe, mais que
la variable d'environnement n'est pas reconnue sous 2k.

J'ai d'abord recherché des fonctions API et je n'ai trouvé que
Function FindEnvironmentString Lib "shell32.dll" Alias
"FindEnvironmentStringA" (ByVal szEnvVar As String) As String
qui ne semble pas fonctionner (point d'entrée de fonction introuvable).
Pourtant, il ne semble pas y avoir de problème de programmation pour appeler
la fonction :
STransfo = FindEnvironmentString (SOrigine).

J'ai utilisé quelques lignes de programme utilisant la fonction Environ(),
mais je pensais trouver une solution globale plus simple.

Une idée serait la bienvenue. Merci.

Aski

5 réponses

Avatar
Zoury
Salut Aski!

essai avec GetEnvironmentVariable(). Elle renvoit la chaine via les
paramètres au lieu d'être via la valeur de retour. J'ai l'impression qu'il
faudrait déclaré FindEnvironmentString() As Long et allez recupéré la chaine
à partir du pointeur retourné (avec les fonctions strlen et strcpy par
exemple)

tiré de l'api Guide :
'***
Private Declare Function GetEnvironmentVariable Lib "kernel32" Alias
"GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As String,
ByVal nSize As Long) As Long
Function GetEnvironmentVar(sName As String) As String
GetEnvironmentVar = String(255, 0)
GetEnvironmentVariable sName, GetEnvironmentVar, Len(GetEnvironmentVar)
If InStr(1, GetEnvironmentVar, Chr$(0)) > 0 Then GetEnvironmentVar Left$(GetEnvironmentVar, InStr(1, GetEnvironmentVar, Chr$(0)) - 1)
GetEnvironmentVar = sName + ": " + GetEnvironmentVar
End Function
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail:
Me.AutoRedraw = True
Me.Print GetEnvironmentVar("USERNAME")
Me.Print GetEnvironmentVar("USERDOMAIN")
Me.Print GetEnvironmentVar("PROCESSOR_IDENTIFIER")
Me.Print GetEnvironmentVar("NUMBER_OF_PROCESSORS")
Me.Print GetEnvironmentVar("OS")
End Sub
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Aski" a écrit dans le message de
news:ufkvzJN%
Bonjour,

En voulant utiliser un chemin d'accès contenu dans le registre et


comportant
une variable d'environnement, je constate que, sur Xp cela passe, mais que
la variable d'environnement n'est pas reconnue sous 2k.

J'ai d'abord recherché des fonctions API et je n'ai trouvé que
Function FindEnvironmentString Lib "shell32.dll" Alias
"FindEnvironmentStringA" (ByVal szEnvVar As String) As String
qui ne semble pas fonctionner (point d'entrée de fonction introuvable).
Pourtant, il ne semble pas y avoir de problème de programmation pour


appeler
la fonction :
STransfo = FindEnvironmentString (SOrigine).

J'ai utilisé quelques lignes de programme utilisant la fonction Environ(),
mais je pensais trouver une solution globale plus simple.

Une idée serait la bienvenue. Merci.

Aski




Avatar
Aski
Bonjour Zoury

À bien réfléchir et rechercher, je ne pense pas qu'il existe de fonction qui
me permette de traduire le chemin
"%UserProfile%Mes documentsInternet"
en un chemin concret tel que "c:Documents and Settings ... ".
C'est ce que j'essayais de faire.
La fonction API que tu proposes semble être strictement comparable à
"Environ()" de VB.
Dans mon cas, la seule solution qui fonctionne consiste à :
- détecter les "%"
- traduire "UserProfile"
- concaténer.
Mais, puisque, sous xp la traduction se fait automatiquement, il doit bien
exister une solution plus générale.

J'ai l'impression que la fonction FindEnvironmentString() ne peut être
exportée, et il semblerait qu'elle soit semblable aux 2 précédentes.

Merci de m'avoir aidé à réfléchir.

Henri


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:Od7qghN%
Salut Aski!

essai avec GetEnvironmentVariable(). Elle renvoit la chaine via les
paramètres au lieu d'être via la valeur de retour. J'ai l'impression qu'il
faudrait déclaré FindEnvironmentString() As Long et allez recupéré la


chaine
à partir du pointeur retourné (avec les fonctions strlen et strcpy par
exemple)

tiré de l'api Guide :
'***
Private Declare Function GetEnvironmentVariable Lib "kernel32" Alias
"GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As


String,
ByVal nSize As Long) As Long
Function GetEnvironmentVar(sName As String) As String
GetEnvironmentVar = String(255, 0)
GetEnvironmentVariable sName, GetEnvironmentVar,


Len(GetEnvironmentVar)
If InStr(1, GetEnvironmentVar, Chr$(0)) > 0 Then GetEnvironmentVar > Left$(GetEnvironmentVar, InStr(1, GetEnvironmentVar, Chr$(0)) - 1)
GetEnvironmentVar = sName + ": " + GetEnvironmentVar
End Function
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail:
Me.AutoRedraw = True
Me.Print GetEnvironmentVar("USERNAME")
Me.Print GetEnvironmentVar("USERDOMAIN")
Me.Print GetEnvironmentVar("PROCESSOR_IDENTIFIER")
Me.Print GetEnvironmentVar("NUMBER_OF_PROCESSORS")
Me.Print GetEnvironmentVar("OS")
End Sub
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Aski" a écrit dans le message de
news:ufkvzJN%
> Bonjour,
>
> En voulant utiliser un chemin d'accès contenu dans le registre et
comportant
> une variable d'environnement, je constate que, sur Xp cela passe, mais


que
> la variable d'environnement n'est pas reconnue sous 2k.
>
> J'ai d'abord recherché des fonctions API et je n'ai trouvé que
> Function FindEnvironmentString Lib "shell32.dll" Alias
> "FindEnvironmentStringA" (ByVal szEnvVar As String) As String
> qui ne semble pas fonctionner (point d'entrée de fonction introuvable).
> Pourtant, il ne semble pas y avoir de problème de programmation pour
appeler
> la fonction :
> STransfo = FindEnvironmentString (SOrigine).
>
> J'ai utilisé quelques lignes de programme utilisant la fonction


Environ(),
> mais je pensais trouver une solution globale plus simple.
>
> Une idée serait la bienvenue. Merci.
>
> Aski
>
>




Avatar
Aski
Bonjour Yanick

À bien réfléchir et rechercher, je ne pense pas qu'il existe de fonction qui
me permette de traduire le chemin
"%UserProfile%Mes documentsInternet"
en un chemin concret tel que "c:Documents and Settings ... ".
C'est ce que j'essayais de faire.
La fonction API que tu proposes semble être strictement comparable à
"Environ()" de VB.
Dans mon cas, la seule solution qui fonctionne consiste à :
- détecter les "%"
- traduire "UserProfile"
- concaténer.
Mais, puisque, sous xp la traduction se fait automatiquement, il doit bien
exister une solution plus générale.

J'ai l'impression que la fonction FindEnvironmentString() ne peut être
exportée, et il semblerait qu'elle soit semblable aux 2 précédentes.

Merci de m'avoir aidé à réfléchir.
Cordialement

Henri


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:Od7qghN%
Salut Aski!

essai avec GetEnvironmentVariable(). Elle renvoit la chaine via les
paramètres au lieu d'être via la valeur de retour. J'ai l'impression qu'il
faudrait déclaré FindEnvironmentString() As Long et allez recupéré la


chaine
à partir du pointeur retourné (avec les fonctions strlen et strcpy par
exemple)

tiré de l'api Guide :
'***
Private Declare Function GetEnvironmentVariable Lib "kernel32" Alias
"GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As


String,
ByVal nSize As Long) As Long
Function GetEnvironmentVar(sName As String) As String
GetEnvironmentVar = String(255, 0)
GetEnvironmentVariable sName, GetEnvironmentVar,


Len(GetEnvironmentVar)
If InStr(1, GetEnvironmentVar, Chr$(0)) > 0 Then GetEnvironmentVar > Left$(GetEnvironmentVar, InStr(1, GetEnvironmentVar, Chr$(0)) - 1)
GetEnvironmentVar = sName + ": " + GetEnvironmentVar
End Function
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail:
Me.AutoRedraw = True
Me.Print GetEnvironmentVar("USERNAME")
Me.Print GetEnvironmentVar("USERDOMAIN")
Me.Print GetEnvironmentVar("PROCESSOR_IDENTIFIER")
Me.Print GetEnvironmentVar("NUMBER_OF_PROCESSORS")
Me.Print GetEnvironmentVar("OS")
End Sub
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Aski" a écrit dans le message de
news:ufkvzJN%
> Bonjour,
>
> En voulant utiliser un chemin d'accès contenu dans le registre et
comportant
> une variable d'environnement, je constate que, sur Xp cela passe, mais


que
> la variable d'environnement n'est pas reconnue sous 2k.
>
> J'ai d'abord recherché des fonctions API et je n'ai trouvé que
> Function FindEnvironmentString Lib "shell32.dll" Alias
> "FindEnvironmentStringA" (ByVal szEnvVar As String) As String
> qui ne semble pas fonctionner (point d'entrée de fonction introuvable).
> Pourtant, il ne semble pas y avoir de problème de programmation pour
appeler
> la fonction :
> STransfo = FindEnvironmentString (SOrigine).
>
> J'ai utilisé quelques lignes de programme utilisant la fonction


Environ(),
> mais je pensais trouver une solution globale plus simple.
>
> Une idée serait la bienvenue. Merci.
>
> Aski
>
>




Avatar
Aski
Bonjour Yanick

À bien réfléchir et rechercher, je ne pense pas qu'il existe de fonction qui
me permette de traduire le chemin
"%UserProfile%Mes documentsInternet"
en un chemin concret tel que "c:Documents and Settings ... ".
C'est ce que j'essayais de faire.
La fonction API que tu proposes semble être strictement comparable à
"Environ()" de VB.
Dans mon cas, la seule solution qui fonctionne consiste à :
- détecter les "%"
- traduire "UserProfile"
- concaténer.
Mais, puisque, sous xp la traduction se fait automatiquement, il doit bien
exister une solution plus générale.

J'ai l'impression que la fonction FindEnvironmentString() ne peut être
exportée, et il semblerait qu'elle soit semblable aux 2 précédentes.

Merci de m'avoir aidé à réfléchir.
Cordialement

Henri


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:Od7qghN%
Salut Aski!

essai avec GetEnvironmentVariable(). Elle renvoit la chaine via les
paramètres au lieu d'être via la valeur de retour. J'ai l'impression qu'il
faudrait déclaré FindEnvironmentString() As Long et allez recupéré la


chaine
à partir du pointeur retourné (avec les fonctions strlen et strcpy par
exemple)

tiré de l'api Guide :
'***
Private Declare Function GetEnvironmentVariable Lib "kernel32" Alias
"GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As


String,
ByVal nSize As Long) As Long
Function GetEnvironmentVar(sName As String) As String
GetEnvironmentVar = String(255, 0)
GetEnvironmentVariable sName, GetEnvironmentVar,


Len(GetEnvironmentVar)
If InStr(1, GetEnvironmentVar, Chr$(0)) > 0 Then GetEnvironmentVar > Left$(GetEnvironmentVar, InStr(1, GetEnvironmentVar, Chr$(0)) - 1)
GetEnvironmentVar = sName + ": " + GetEnvironmentVar
End Function
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail:
Me.AutoRedraw = True
Me.Print GetEnvironmentVar("USERNAME")
Me.Print GetEnvironmentVar("USERDOMAIN")
Me.Print GetEnvironmentVar("PROCESSOR_IDENTIFIER")
Me.Print GetEnvironmentVar("NUMBER_OF_PROCESSORS")
Me.Print GetEnvironmentVar("OS")
End Sub
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Aski" a écrit dans le message de
news:ufkvzJN%
> Bonjour,
>
> En voulant utiliser un chemin d'accès contenu dans le registre et
comportant
> une variable d'environnement, je constate que, sur Xp cela passe, mais


que
> la variable d'environnement n'est pas reconnue sous 2k.
>
> J'ai d'abord recherché des fonctions API et je n'ai trouvé que
> Function FindEnvironmentString Lib "shell32.dll" Alias
> "FindEnvironmentStringA" (ByVal szEnvVar As String) As String
> qui ne semble pas fonctionner (point d'entrée de fonction introuvable).
> Pourtant, il ne semble pas y avoir de problème de programmation pour
appeler
> la fonction :
> STransfo = FindEnvironmentString (SOrigine).
>
> J'ai utilisé quelques lignes de programme utilisant la fonction


Environ(),
> mais je pensais trouver une solution globale plus simple.
>
> Une idée serait la bienvenue. Merci.
>
> Aski
>
>




Avatar
scraper
Bonjour Aski
(dans news:ewIkaWV%)
tu nous disais :

Bonjour Zoury

À bien réfléchir et rechercher, je ne pense pas qu'il existe de
fonction qui me permette de traduire le chemin
"%UserProfile%Mes documentsInternet"
en un chemin concret tel que "c:Documents and Settings ... ".
C'est ce que j'essayais de faire.



tu plaisantes, là ? ;-)

La fonction API que tu proposes semble être strictement comparable à
"Environ()" de VB.
Dans mon cas, la seule solution qui fonctionne consiste à :
- détecter les "%"
- traduire "UserProfile"
- concaténer.
Mais, puisque, sous xp la traduction se fait automatiquement, il doit
bien exister une solution plus générale.



mais oui (tu vois, je ne fais pas que critiquer .... rofl


'---8<----
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

Private 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

'----8<----

ensuite, il ne te restep plus qu'à récupérer le résultat de ta lecture de
clé de Regsitre, et lui appliquer

ReadRegistry = SubstEnv(Value)

(si ReadRegistry est le nom de ta fonction de lecture dans le Registre, et
Value la valeur retournée ... ;-)


NB : ce n'est pas de moi, mais j'avais fait la demande il y a quelque temps
sur ce même forum ... ;-)
tu devrais même pouvoir retrouver le fil initial, mais j'avoue ne plus
l'avoir sous la main :-(


--

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

scraper