Page 1 sur 2

Comment crée, utiliser, supprimer une variable environnement

Publié : lun. 06/mars/2017 19:44
par Shadow
Salut,

Comment crée, utiliser, supprimer une variable environnement avec PB ?

Re: Comment crée, utiliser, supprimer une variable environne

Publié : lun. 06/mars/2017 19:48
par falsam
SetEnvironmentVariable(Name$, Value$)
GetEnvironmentVariable(Name$)
RemoveEnvironmentVariable(Name$)

Re: Comment crée, utiliser, supprimer une variable environne

Publié : lun. 06/mars/2017 20:39
par Shadow
Ah ya ça dans PB :D
Merci Falsam 8)

Re: Comment crée, utiliser, supprimer une variable environne

Publié : lun. 06/mars/2017 21:11
par Shadow
Petit problème :?

Je voudrais créer une variable environnement persistante, qui ne s’efface
pas à la fin du programme, or là, c'est le cas :(

Comment je peux faire ça ?

Re: Comment crée, utiliser, supprimer une variable environne

Publié : lun. 06/mars/2017 22:58
par cage
Les variables environnement de chaque utilisateurs sont inscrites dans la branche [HKEY_CURRENT_USER\Environment]
Exemple avec mon compte admin (admin est mon nom d'utilisateur)

Code : Tout sélectionner

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"Path"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,5c,00,41,00,70,00,70,00,44,00,61,00,74,00,61,00,5c,00,4c,00,\
  6f,00,63,00,61,00,6c,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,\
  00,74,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,41,00,70,00,70,00,\
  73,00,3b,00,43,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,20,\
  00,46,00,69,00,6c,00,65,00,73,00,5c,00,42,00,61,00,6e,00,64,00,69,00,7a,00,\
  69,00,70,00,5c,00,37,00,7a,00,3b,00,59,00,3a,00,5c,00,44,00,4f,00,53,00,3b,\
  00,59,00,3a,00,5c,00,57,00,49,00,4e,00,3b,00,43,00,3a,00,5c,00,50,00,72,00,\
  6f,00,67,00,72,00,61,00,6d,00,20,00,46,00,69,00,6c,00,65,00,73,00,20,00,28,\
  00,78,00,38,00,36,00,29,00,5c,00,4a,00,61,00,76,00,61,00,5c,00,6a,00,72,00,\
  65,00,31,00,2e,00,38,00,2e,00,30,00,5f,00,31,00,30,00,31,00,5c,00,62,00,69,\
  00,6e,00,61,00,69,00,72,00,65,00,00,00
"TEMP"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,5c,00,41,00,70,00,70,00,44,00,61,00,74,00,61,00,5c,00,4c,00,\
  6f,00,63,00,61,00,6c,00,5c,00,54,00,65,00,6d,00,70,00,00,00
"TMP"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,00,\
  45,00,25,00,5c,00,41,00,70,00,70,00,44,00,61,00,74,00,61,00,5c,00,4c,00,6f,\
  00,63,00,61,00,6c,00,5c,00,54,00,65,00,6d,00,70,00,00,00
"OneDrive"="C:\\Users\\admin\\OneDrive"
Il doit falloir inscrire les variables dans le registre pour qu'elles soient permanentes.
Par contre, je ne sais pas si elles sont prises en compte immédiatement.
A tester.
Pour les variables globales, elles sont inscrites dans la branche
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
Exemple:

Code : Tout sélectionner

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"ComSpec"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
  74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,63,\
  00,6d,00,64,00,2e,00,65,00,78,00,65,00,00,00
"NUMBER_OF_PROCESSORS"="4"
"OS"="Windows_NT"
"Path"=hex(2):43,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,44,\
  00,61,00,74,00,61,00,5c,00,4f,00,72,00,61,00,63,00,6c,00,65,00,5c,00,4a,00,\
  61,00,76,00,61,00,5c,00,6a,00,61,00,76,00,61,00,70,00,61,00,74,00,68,00,3b,\
  00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,\
  5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,3b,00,25,00,53,00,79,\
  00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,3b,00,25,00,53,00,\
  79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,\
  00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,57,00,62,00,65,00,6d,00,3b,00,\
  25,00,53,00,59,00,53,00,54,00,45,00,4d,00,52,00,4f,00,4f,00,54,00,25,00,5c,\
  00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,57,00,69,00,6e,00,\
  64,00,6f,00,77,00,73,00,50,00,6f,00,77,00,65,00,72,00,53,00,68,00,65,00,6c,\
  00,6c,00,5c,00,76,00,31,00,2e,00,30,00,5c,00,3b,00,43,00,3a,00,5c,00,50,00,\
  72,00,6f,00,67,00,72,00,61,00,6d,00,20,00,46,00,69,00,6c,00,65,00,73,00,20,\
  00,28,00,78,00,38,00,36,00,29,00,5c,00,4c,00,69,00,76,00,65,00,73,00,74,00,\
  72,00,65,00,61,00,6d,00,65,00,72,00,00,00
"PATHEXT"=".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"
"PROCESSOR_ARCHITECTURE"="AMD64"
"PROCESSOR_IDENTIFIER"="Intel64 Family 6 Model 55 Stepping 3, GenuineIntel"
"PROCESSOR_LEVEL"="6"
"PROCESSOR_REVISION"="3703"
"PSModulePath"=hex(2):25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,\
  00,6c,00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,\
  50,00,6f,00,77,00,65,00,72,00,53,00,68,00,65,00,6c,00,6c,00,5c,00,4d,00,6f,\
  00,64,00,75,00,6c,00,65,00,73,00,3b,00,25,00,53,00,79,00,73,00,74,00,65,00,\
  6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,\
  00,33,00,32,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,50,00,6f,00,\
  77,00,65,00,72,00,53,00,68,00,65,00,6c,00,6c,00,5c,00,76,00,31,00,2e,00,30,\
  00,5c,00,4d,00,6f,00,64,00,75,00,6c,00,65,00,73,00,00,00
"TEMP"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
  00,25,00,5c,00,54,00,45,00,4d,00,50,00,00,00
"TMP"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,\
  25,00,5c,00,54,00,45,00,4d,00,50,00,00,00
"USERNAME"="SYSTEM"
"windir"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
  00,25,00,00,00
A manipuler avec précaution.
Gérard

Re: Comment crée, utiliser, supprimer une variable environne

Publié : lun. 06/mars/2017 23:33
par Shadow
Merci cage, je croyais que les variable environnementale étais persistante :?
Je vais pas utiliser le registre, ça ne convient pas du tout à se que je veux faire.

Re: Comment crée, utiliser, supprimer une variable environne

Publié : lun. 06/mars/2017 23:52
par cage
Pour les rendre permanentes de façon manuelle
[WIN]+R Ouvrir: sysdm.cpl
Onglet Paramètres systèmes avancés
Cliquer Variables d'environnement...
Dans la partie haute, les variables pour l'utilisateur actuel
Dans la partie basse, les variables système (globales)

Re: Comment crée, utiliser, supprimer une variable environne

Publié : mar. 07/mars/2017 7:20
par Marc56
SETX

« Crée ou modifie les variables d'environnement dans l'environnement de système, ou un utilisateur sans nécessiter de programmation ou de script.
La commande Setx également récupère les valeurs des clés de Registre et les écrit dans des fichiers texte. »

https://technet.microsoft.com/fr-fr/lib ... s.10).aspx

Aide rapide:
setx /?

:wink:

Re: Comment crée, utiliser, supprimer une variable environne

Publié : mar. 07/mars/2017 8:49
par Ar-S
La vraie question est "Pourquoi" as-tu besoin de modifier les variables d'environnement?

Re: Comment crée, utiliser, supprimer une variable environne

Publié : mar. 07/mars/2017 10:51
par Shadow
Merci Marc :wink:
La vraie question est "Pourquoi" as-tu besoin de modifier les variables d'environnement?
Pour ne pas devoir créer de fichier pour écrire quelque choisie dedans.
Et je ne veux pas utiliser le presse papier parce que je veux pas remplacer se qu'il à dedans...

Ont ne peut pas créer une variable persistante en mémoire pendent que l'ordi est allumé ?
Une variable que je peut atteindre quand je veux avec n'importe quel variable.

Un genre de presse papier 2 quoi.

Re: Comment crée, utiliser, supprimer une variable environne

Publié : mar. 07/mars/2017 13:12
par Ar-S
je ne veux pas utiliser le presse papier parce que je veux pas remplacer se qu'il à dedans
Je ne vois pas le rapport..
Pour ne pas devoir créer de fichier pour écrire quelque choisie dedans.
:?:
Ont ne peut pas créer une variable persistante en mémoire pendent que l'ordi est allumé ?
Une variable que je peut atteindre quand je veux avec n'importe quel variable.
Sérieux si quelqu'un te comprend qu'il se manifeste. Fais un effort.

Re: Comment crée, utiliser, supprimer une variable environne

Publié : mar. 07/mars/2017 13:22
par falsam
Ar-S a écrit :Sérieux si quelqu'un te comprend qu'il se manifeste. Fais un effort.
je me sens moins seul dans ce désert d'incompréhension....

Re: Comment crée, utiliser, supprimer une variable environne

Publié : mar. 07/mars/2017 13:29
par SPH
c'est du shadow :lol:

Re: Comment crée, utiliser, supprimer une variable environne

Publié : mar. 07/mars/2017 14:15
par Marc56
Les variables qu'on créé depuis PB sont comme celles qu'on crée depuis le shell (cmd) avec la commande SET. Elles ne sont valables que dans l'instance du programme lui-même.
On peut par contre lire toutes les variables existantes depuis le programme PB.

On peut créer une variable environnement "externe" (persistante) (paramètre -m de SETX) depuis un programme, mais on ne peut pas l'utiliser dans la même instance, car tout programme lit ces variables à l'ouverture uniquement. (il faut donc fermer et rouvrir)

Voir la réponse donnée sur:
http://superuser.com/questions/647505/s ... iable-setx

(testé: ça fonctionne)
:wink:

J'ai honte de l'admettre :o mais j'ai compris ce que voulait shadow :mrgreen:

PS. Pour ne pas perdre de contenu du presse-papier (et d'une manière générale pour la productibité), il est préférable d'utiliser un presse-papier multiple comme par exemple Ditto (http://ditto-cp.sourceforge.net/) ou ClipMate http://www.thornsoft.com/

Re: Comment crée, utiliser, supprimer une variable environne

Publié : mar. 07/mars/2017 14:32
par Marc56
Exemple pratique dérivé de l'article

:arrow: Pour une variable système valable pour tous les utilisateurs. Sinon utiliser /u
https://technet.microsoft.com/fr-fr/lib ... s.10).aspx

Lancez ce programme avec PB en mode admin

Code : Tout sélectionner

RunProgram("CMD", "/c setx Hello Hello_World -m", "", #PB_Program_Wait)
Debug "Variable Hello = >" + GetEnvironmentVariable("Hello") + "<"
= Rien

Code : Tout sélectionner

Variable Hello = ><
Et on peut relancer le programme plusieurs fois, il ne se passe rien
La variable est pourtant là (voir panneau système) ou dans une console en mode admin

Code : Tout sélectionner

C:\>echo %hello%
Hello_World
Refermez PB et réouvrez-le (toujours en mode admin) et relancez le même programme

Code : Tout sélectionner

Variable Hello = >Hello_World<
La même chose, mais pour l'utilisateur en cours

Code : Tout sélectionner

ComputerName$ = GetEnvironmentVariable("COMPUTERNAME")
RunProgram("CMD", " /c setx /s " + ComputerName$ + " Hello Hello_World", "", #PB_Program_Wait)
Debug "Variable Hello = >" + GetEnvironmentVariable("Hello") + "<"
(Si on veut voir le résultat de la commande, on remplace /c par /k, puis on tapes exit)

C'est le comportement normal des variables d'environnement. 8)
et c'est pour cela qu'on préfère les fichiers flag pour passer un lot de données d'un programme à l'autre
(et aussi en partie pour cela qu'on a inventé le langage Perl)

@shadow: en un mot: n'utilises pas les variables d'environnement système sans en connaitre le fonctionnement, car mal utilisées tu peux mettre ton système en rade (ça ne l'effacera pas, mais ça peut mettre la zone) :!: