[dotnet] changement de variables d'environnement en broadcoast (pour tous processsus)

Contenu du snippet

Ce code permet de changer une ou plusieurs variable(s) d'environnement sous windows 2000 pour l'ensemble des applications d'un poste sans rebooter.

>> Il ne faut pas utiliser l'API : SetEnvironmentVariable, car celle-ci, ne fait que de changer la valeur de la ou des variable(s) d'environnement pour un 1 seul processus.<<

Le but de ce code est de changer la ou les variables d'environnement pour tous les processus de windows sans rebooter. Pour cela il faut modifier la base de registre au niveau de : "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" (sous Win2000) et par suite d'envoyer un message en BroadCoast à tout l'os pour lui spécifier le changement de variables.

On utilise l'api : Private Declare Function SendMessage Lib "user32", cependant sous dotnet l'utilisation des bibliothèques statiques de windows doivent être appeler et Marshaliser.

Source / Exemple :


Imports System.Runtime.InteropServices
Imports System.Text
Public Class ImportsApi
    Public Const WM_SETTINGCHANGE = 26
    Public Const HWND_BROADCAST = 65535

    '--This function sends the specified message to a window or windows--
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
       (ByVal hwnd As Integer, ByVal Msg As Integer, _
        ByVal wParam As Integer, _
       <MarshalAs(UnmanagedType.AsAny)> ByVal lParam As Object) As Integer
    Private Declare Function RegisterWindowMessage Lib "user32" 
       Alias "RegisterWindowMessageA" (ByVal lpString As String) As Integer

    Public Function changement() As Boolean
dim tmp as string 
  
'Chaine du path 
tmp = "SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\ESSBASE6\BIN;C:\ESSBASE6\API\Redist;c:\sys\ora8i\bin;c:\sys\orawinnt\bin;C:\Sys\Pcom\;C:\Program Files\IBM\Trace Facility\;C:\PROGRA~1\CONTINUUS\CCM51\BIN;C:\ARBORPATH\bin" 
  
  
'Modifie la base de registre de windows (DonnerValeur est un fonction de modification de d'un clé de registre que vous pouvez retrouver ici ) 
Call DonnerValeur(0, "SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "ARBORPATH", "C:\ARBOR") 
Call DonnerValeur(0, "SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "Path", tmp) 
  
'Message en Broadcoast pour l'envoie du changement à tous les processus de windows concernant cette modification 
Dim nMsg As UInteger = RegisterWindowMessage("WM_SETTINGCHANGE")
Call SendMessage(HWND_BROADCAST, nMsg, 0, "Environment")
  
  
    End Function

End Class

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.