Var environnement

Var environnement - C - Programmation

Marsh Posté le 23-09-2003 à 08:53:45    

Bonjour,
 
sous windows 2000, si on fait bouton droit sur le poste de travail, onglet avancé, bouton variables d'environnement.
Puis OK, OK.
Alors les variables d'environnement sont RECHARCHE en mémoire!
Comment seuelemtn recharger les variables?
 
en C?
 
Je ne cherche pas du code totu fait, juste une piste, le nom d'une fonction ou autre.
 
MSDN reste impénetrable sur ce point :)
 
merci

Reply

Marsh Posté le 23-09-2003 à 08:53:45   

Reply

Marsh Posté le 23-09-2003 à 09:13:20    

Peut-être, je dis bien peut-être, qu'il faut voir du côté de la base de registre...

Reply

Marsh Posté le 23-09-2003 à 09:15:48    

JagStang a écrit :

Peut-être, je dis bien peut-être, qu'il faut voir du côté de la base de registre...


 
Les variables d'envirronements doivent effectivement être définies dans la base de registre (local machine + current user je pense). Cependant il doit falloir prévenir windows qu'elles ont été modifier.


---------------
Le Tyran
Reply

Marsh Posté le 23-09-2003 à 09:18:38    

Code :
  1. int main(int argc, char **argv, char ** envp)
  2. {
  3.     for (int i=0 ; i<sizeof(envp) ; i++)
  4.         cout << envp[i] ;
  5.  
  6.   system("PAUSE" );
  7.   return 0;
  8. }


 
http://lfe.developpez.com/FAQ/C/?p [...] ironnement

Reply

Marsh Posté le 23-09-2003 à 09:22:51    

JagStang a écrit :

Code :
  1. int main(int argc, char **argv, char ** envp)
  2. {
  3.     for (int i=0 ; i<sizeof(envp) ; i++)
  4.         cout << envp[i] ;
  5.  
  6.   system("PAUSE" );
  7.   return 0;
  8. }


 
http://lfe.developpez.com/FAQ/C/?p [...] ironnement


 
 :non: Ca doit pas marcher, sous win2000 chaque console a ses propres variables d'environement.


---------------
Le Tyran
Reply

Marsh Posté le 23-09-2003 à 09:23:50    

je pense qu'aga sait comment les recuperer au lancement de son programme mais pas comment savoir qu'il y a eu changement ni comment recup ces changements

Reply

Marsh Posté le 23-09-2003 à 09:24:31    

LetoII a écrit :


 
 :non: Ca doit pas marcher, sous win2000 chaque console a ses propres variables d'environement.


 
ben ca lui rends les var d'environnement correspondant a la console dans laquelle le programme a ete lancé [:spamafote]

Reply

Marsh Posté le 23-09-2003 à 09:25:06    

chrisbk a écrit :


 
ben ca lui rends les var d'environnement correspondant a la console dans laquelle le programme a ete lancé [:spamafote]


 
Oui, d'où pas de changement au niveau du système.


---------------
Le Tyran
Reply

Marsh Posté le 23-09-2003 à 09:36:33    

C'est pas la réponse... une piste tout au plus... j'aurais du expliquer

Reply

Marsh Posté le 23-09-2003 à 09:47:18    

Les variables je sais les mettres.
Le blème?
Elles ne sont pas effectives!
Cad qu'un echo %toto% ,ne marche pas!
sauf si je force la recharge des var d'environnement (donc en passant par l'onglet et deux fois ok,ok)
 
ou si je me deconnecte reconnecte une fois.
 
Donc windows fais un truc pour recharcher les variables, suites à modif, c'est ce petit bout qu'il me manque :)

Reply

Marsh Posté le 23-09-2003 à 09:47:18   

Reply

Marsh Posté le 23-09-2003 à 09:55:02    

AGA a écrit :

Les variables je sais les mettres.
Le blème?
Elles ne sont pas effectives!
Cad qu'un echo %toto% ,ne marche pas!
sauf si je force la recharge des var d'environnement (donc en passant par l'onglet et deux fois ok,ok)
 
ou si je me deconnecte reconnecte une fois.
 
Donc windows fais un truc pour recharcher les variables, suites à modif, c'est ce petit bout qu'il me manque :)


 
Il doit y avoir un message à envoyer au système... Ca doit être un problème simillaire au changement des icônes.


---------------
Le Tyran
Reply

Marsh Posté le 23-09-2003 à 12:21:12    

AGA a écrit :


Donc windows fais un truc pour recharcher les variables, suites à modif, c'est ce petit bout qu'il me manque :)


 
Quand t'écris "Recharcher" pour "rechercher", c'est parce que t'as un accent ?

Reply

Marsh Posté le 23-09-2003 à 12:30:00    

le sizeof ne fonctionne pas.
la manière de faire tout ça, c'est juste comme pour argv, on cherche le NULL final
 

Code :
  1. #include <stdio.h>
  2. int main(int argc, char *argv[], char *envp[])
  3. {
  4.   size_t i;
  5.   for (i=0; envp[i]!=NULL; i++)
  6.     {
  7.       puts(envp[i]);
  8.     }
  9.  
  10.   return 0;
  11. }

Reply

Marsh Posté le 23-09-2003 à 14:05:28    

non,non, je dit bien recharger, prendre en compte les modifications, les mettres en mémoires.
 
JE ne sais pas si c'est bien claires?  :sweat:

Reply

Marsh Posté le 24-09-2003 à 11:17:09    

:(

Reply

Marsh Posté le 24-09-2003 à 12:55:36    

El_gringo a écrit :


 
Quand t'écris "Recharcher" pour "rechercher", c'est parce que t'as un accent ?


 
moi j'avais cru que c'était plutôt pour dire "recharger" :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 25-09-2003 à 10:17:34    

Aucune idée sur le message envoyé par Windows? Lorsque l'on jette seulement un oeil à ses variables d'environnemnt et qu'on utilise le bouton OK?
sous 2000?

Reply

Marsh Posté le 25-09-2003 à 10:24:03    

non  [:spamafote]


---------------
Le Tyran
Reply

Marsh Posté le 25-09-2003 à 12:58:47    

http://msdn.microsoft.com/library/ [...] iables.asp
 
ils disent ceci :
 
Calling SetEnvironmentVariable has no effect on the system environment variables. The user can add or modify system environment variables using the Control Panel. To programmatically add or modify system environment variables, add them to the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment registry key, then broadcast a WM_SETTINGCHANGE message. This allows applications, such as the shell, to pick up your updates.
 
Par contre je comprends pas bien comment utiliser ce message :/
 
 

Reply

Marsh Posté le 25-09-2003 à 12:59:40    

ben tu le recupere dans ta boucle de message et tu le traite (?)

Reply

Marsh Posté le 25-09-2003 à 14:16:52    

chrisbk a écrit :

ben tu le recupere dans ta boucle de message et tu le traite (?)
 


 
Ha ben non, tu l'envois au contraire, pour signaler au système que t'as changé les settings, logique quoi!  
Genre, je dirais qu'après avoir changé ce qu'on voulait dans la base de registre (là où l'a dit le truc de Mr AGA), on fait qqch comme:

Code :
  1. SendMessage (HWND_BROADCAST,WM_SETTINGCHANGE, ...);


 
Mais en fait, j'viens de lire la doc de WM_SETTINGCHANGE, y a tout ce qu'il faut. Apparement, utiliser SystemParametersInfo, en spécifiant SPIF_SENDCHANGE dans un paramètre


Message édité par El_gringo le 25-09-2003 à 14:17:28
Reply

Marsh Posté le 25-09-2003 à 15:04:26    

ben nan ?
Si j'ai bien cpris son brol il veut savoir quand elles ont ete modifiées, cf
 

Citation :


Comment seuelemtn recharger les variables?  
 


Reply

Marsh Posté le 25-09-2003 à 15:06:24    

chrisbk a écrit :

ben nan ?
Si j'ai bien cpris son brol il veut savoir quand elles ont ete modifiées, cf
 

Citation :


Comment seuelemtn recharger les variables?  
 


 


 
 :non:


---------------
Le Tyran
Reply

Marsh Posté le 25-09-2003 à 15:08:41    

chrisbk a écrit :

ben nan ?
Si j'ai bien cpris son brol il veut savoir quand elles ont ete modifiées, cf
 

Citation :


Comment seuelemtn recharger les variables?  
 




 
Ben oui. Il pense les avoir changées, mais apparement, windows ne "rafraichit" pas...

Reply

Marsh Posté le 25-09-2003 à 15:17:21    

oui windows il ne sait pas qu'elle on changé :/
 
donc faut lui dire : "Hey les gars ya des nouvelles var d'environnement".
 
Bon apriori faut que j'envoie un message WM_SETTINGCHANGE
 
comme le C je ne connais pas :D
 
Je pense à ceci
 
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, Wparam, null)
 
wparam je penses le remplacer par ceci :
SystemParametersInfo(???; 0, null, SPI_SENDCHANGE)
 
par contre le premier paramètre uiactions
bah ya pas ce que je veux dans la liste :/
 
Jsuis aps bon je sais  :p

Reply

Marsh Posté le 25-09-2003 à 16:03:59    

Je penses avoir trouvé qqchose d'interessant :
http://community.borland.com/artic [...] 54,00.html
 
D'ailleurs ça me fait remarquer que j'ai mal lu la doc msdn...
Send messagetimeout!  ;)

Reply

Marsh Posté le 25-09-2003 à 16:59:15    

Code :
  1. #include <windows.h>
  2. int main (int argc, char *argv[])
  3. {
  4. int lParam;
  5. int wParam=0;
  6.     char *Buf="Environment";
  7.     unsigned long *aResult;
  8.  SendMessageTimeout(HWND_BROADCAST ,
  9.      WM_SETTINGCHANGE ,
  10.      wParam,
  11.      long(Buf),
  12.      SMTO_NORMAL ,
  13.      4000,
  14.      aResult);
  15. // Display windows lasterror if the result is an error.
  16.  if (aResult != 0)
  17.  {
  18.  // SysErrorMessage(aResult);
  19.  }
  20. }


 
Voilà qu'en pensez vous?
Je ne sais pas convertir la fonction Delphi SysErrorMessage.

Reply

Marsh Posté le 25-09-2003 à 17:28:50    

AGA a écrit :


Je ne sais pas convertir la fonction Delphi SysErrorMessage.


 
:??: il suffit d'afficher la chaîne que la fonction te renvoie, non ?
Sinon il y a aussi RaiseLastOSError();


Message édité par antp le 25-09-2003 à 17:29:33

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed