Bonjour à tous,

Je dois réaliser un petit exécutable permettant de modifier la variable system "Path".

En gros, je récupère le contenu de la variable dans un mémo, l'utilisateur clique sur un bouton qui met à jour la base de registre en conséquence.
Jusque là, tout va bien (merci à developpez.com pour ce très bon tuto :http://castelain.developpez.com/arti...Environnement/).

Le problème se pose ensuite pour que le système prenne en compte les nouvelles valeurs du Path. J'ai essayé avec le SendMessageTimeOut (comme indiqué par le tuto) mais cela ne fonctionne pas pour le path (pas de soucis avec les autres variables).

J'ai donc essayé avec BroadcastSystemMessage. Sauf que là, j'ai à chaque fois une magnifique violation d'accès dont je n'arrive pas à déterminer la cause . J'ai essayé en D2007 et en D2009 avec le même résultat.

Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
[...]
 
// Chargement du path dans le mémo
procedure TForm1.BtChargerClick(Sender: TObject);
var
  LstVarsEnvSystem : TStringList;
begin
  LstVarsEnvSystem := TStringList.Create;
  Try
    TOutilsInfosSystem.ReadSystemEnvVars(LstVarsEnvSystem);
    MoPath.Text := StringReplace(LstVarsEnvSystem.Values['Path'], ';' , #13, [rfReplaceAll]);
  Finally
    LstVarsEnvSystem.Free;
  End;
end;
 
procedure TForm1.BtenregClick(Sender: TObject);
begin
  TOutilsInfosSystem.SetSystemEnvVar('Path',StringReplace(MoPath.Text, #13,';', [rfReplaceAll]),false);
  AppliquerVariableSystem;
end;
 
procedure TForm1.AppliquerVariableSystem;
var
  lParam: PAnsiChar;
begin
  lParam := 'Environment';
  BroadcastSystemMessage(BSF_POSTMESSAGE,PDWord(BSM_APPLICATIONS),WM_SETTINGCHANGE,0, Integer(lParam));
end;
 
end.
Si quelqu'un a des éléments de réponses sur la raison de cette violation d'accès, je suis carrément preneur.

Merci d'avance.