Violation d'accès avec BroadcastSystemMessage
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:
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.