Les variables d'environnement en BROADCAST ?

[Résolu]
Signaler
Messages postés
22
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
4 février 2008
-
Messages postés
22
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
4 février 2008
-
Bonjour,
J'ai un problème de mise à jour d'une variable d'environnment, mon but est de la changer (Jusque là pas de soucis), mais ensuite, les softs que je lance doivent la prendre en compte et là le bas blèsse, je m'explique :
Je me suis rendu compte que quand j'ouvrais les propriétes du système->avancés->variables d'environnement et que je cliquais sur OK, windows faisais quelque chose et que là ma variable etais partout, j'ai donc voulu faire un test avec un code inspirer du site :
Public

Class Form1

'API

Private
Declare
Function SendMessage 
Lib
"user32" _

Alias
"SendMessageA" (
ByVal hwnd 
As
Long, _

ByVal wMsg 
As
Long, 
ByVal wParam 
As
Long, _

ByVal lParam 
As
String) 
As
Long

'CONSTANTE 

Private
Const WM_SETTINGCHANGE = &H1A

Private
Const HWND_BROADCAST = &HFFFF& 

Private
Sub changement()

'Modifie la base de registre de windows 

Dim cle, cletemp, msg 
As
String

Dim i 
As
Integercle = 

"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet00"

For i = 1 
To 9 
Step 1cletemp = cle + i.ToString + 

"\Control\Session Manager\Environment"

If
My.Computer.Registry.GetValue(cletemp, _

"TrCatiaPath", 
Nothing) 
Is
Nothing
Thenmsg = cletemp + 

" non trouver !!"MsgBox(msg)

Elsemsg = cletemp + 

" OK !!"MsgBox(msg)

My.Computer.Registry.SetValue(cletemp, 
"TrCatiaPath", 
"c:\test")

End
If

Next

'Message en Broadcoast pour l'envoie du changement à tous les processus de windows concernant cette modificationcle = 

"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

My.Computer.Registry.SetValue(cle, 
"TrCatiaPath", 
"c:\test2")

Call SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 
"Environment")

End
Sub

Private
Sub Form1_Load(
ByVal sender 
As System.Object, 
ByVal e 
As System.EventArgs) 
Handles
MyBase.Loadchangement()

End
SubEnd

Class

Mon problème est un soucis de signature a l'appel de SendMessage, pourtant mes paramètres sont correct il me semble....
Donc avant que mon Boss m'etripe, quelqu'un aurrais une solution pour faire la même chose que Windows quand je clique sur OK dans les variables d'environnment ?
PS : J'utilise VB 2005 Express Edition

3 réponses

Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Salut,
Héhé, tu n'es pas le premier à te faire avoir... Les Long de vb6 deviennent des Integer en .Net, donc dans la déclaration de ton SendMessage, remplace les Long par des Integer (éventuellement des IntPtr si ce sont des pointeurs, mais des Integer devraient de toutes façons convenir).

<hr size="2" width="100%" />Julien.
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Bonsour,
Jette un coup d'oeil à la méthode Environnment.SetEnvironment

++
Messages postés
22
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
4 février 2008

DIEU exite et il es sur ce site !!!!!!
Bon alors, effectivement si je remplace les long par des integer, j'ai pas de soucis de signature, mais il ne se passe rien, par contre en utlisant  Environnment.SetEnvironment là ca marche...Je change donc la valeur de ma variable, puis j'ouvre un cmd, je fais un echo de ma var et joie ca marche....
Encore Merci de ce dépannage express....
Je vais enfin pouvoir faire un joli launcher pour ces programmes qui ne gèrent pas bien leur propre config, c'est mon BOSS qui va être heureux...