Les variables d'environnement en BROADCAST ?

Résolu
lucky hal Messages postés 22 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 4 février 2008 - 26 févr. 2007 à 19:16
lucky hal Messages postés 22 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 4 février 2008 - 27 févr. 2007 à 11:50
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
A voir également:

3 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
26 févr. 2007 à 19:35
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.
3
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
26 févr. 2007 à 19:36
Bonsour,
Jette un coup d'oeil à la méthode Environnment.SetEnvironment

++
3
lucky hal Messages postés 22 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 4 février 2008
27 févr. 2007 à 11:50
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...
3
Rejoignez-nous