jep93
Messages postés2Date d'inscriptiondimanche 2 novembre 2003StatutMembreDernière intervention14 novembre 2003
-
4 nov. 2003 à 07:04
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
14 nov. 2003 à 10:18
Mon problème est de modifier par programme une variable d'environnement définie au niveau système.
Ce que je sais :
Lors de l'activation d'un programme ou l'ouverture d'une session Dos, une copie des variables d'environnement définies au niveau du système est fournie à la nouvelle instance. Cette dernière pourra en prendre connaissance (API GetEnvironmentVariable), les modifier, les supprimer ou en créer de nouvelles (API SetEnvironmentVariable) mais ces changements ne seront connus que de cette instance ou de ses descendants (WinExec).
Les variables d'environnement au niveau du système sont initialisées lors de l'installation de Windows à partir de la ruche HKLM\System\CurrentControlSet\Control\Session Manager\Environment de la base des registres. Une modification d'une valeur au niveau de la registry ne sera prise en compte que lors du prochain reboot.
Ce que je veux obtenir :
Modifier une variable d'environnement au niveau système afin que tous les applicatifs activés après cette modification prennent en compte ce changement et ce, bien sur, sans avoir à rebooter.
Ce que suppose :
La solution doit se trouver dans un échange DDE avec SysDM.cpl (l'extension Système du Panneau de Configuration) mais je ne connais pas les termes du dialogue.
jep93
Messages postés2Date d'inscriptiondimanche 2 novembre 2003StatutMembreDernière intervention14 novembre 2003 14 nov. 2003 à 08:31
Merci de l'information mais l'article ne répond pas à mon problème et pourtant la solution existe (du moins pour NT) ; il s'agit du programme SetX.exe contenu dans le Resource Tools Kit et mis gratuitement à disposition sur le net par Microsoft : ftp://ftp.microsoft.com/reskit/win2000/setx.zip. Je pense que l'auteur de l'article aurait dû apporter cette précision fort intéressante.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 14 nov. 2003 à 10:18
J'insiste.
Dans le paragraphe Manipuler les variables d'environnement par programme, il est écrit ceci :
"WM_SETTINGCHANGE : Ce message permet d'informer les processus en cours d'exécution de la modification des variables d'environnement (entre autres). Il doit être envoyé à l'aide des fonctions SendMessageTimeOut ou BroadcastSystemMessage et le paramètre LParam doit contenir la chaîne 'Environment'. L'utilisation d'un temps mort (time out) permet d'attendre l'acquittement des applications traitant ce message tout en évitant de bloquer le système lorsque certaines applications ne traitent pas celui-ci."
Ceci répond à la question posée plus haut : "Modifier une variable d'environnement au niveau système afin que tous les applicatifs activés après cette modification prennent en compte ce changement et ce, bien sur, sans avoir à rebooter.".