码迷,mamicode.com
首页 > 其他好文 > 详细

HWND_BROADCAST的一个用法——修改环境变量,立即通知系统

时间:2014-08-13 22:08:17      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   文件   ar   art   问题   

在编程时遇到一个问题: 
就是程序通过修改注册表,修改了系统的环境变量,但是不会立即生效,除非在【我的电脑】上点击右键,然后打开环境变量的窗口,点击【OK】后,才能生效。
后来用Spy++工具捕获消息,发现在点击【OK】按钮时,发送了WM_SETTINGCHANGE消息。

在网上查找原因时发现,修改了注册表之后,系统需要重启,或者向上述操作,系统才能知道注册表被修改了,之后才能生效。
如果想修改完环境变量后,立即生效,需要向系统发送消息:

 wstring szParam = _T( "Environment" );
 ::SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)szParam.c_str() );

消息的第二个参数必须是_T( "Environment" )字符串,代表是环境变量发生了改变。

测试的方法:
第一步:
修改注册表:HKEY_CURRENT_USER//Environment下的TMP值改成“F:”
然后在文件夹上面的地址栏输入%TMP%,没有响应。
按照文章开始时叙述的方法执行后,在输入%TMP%,果然生效,系统的临时文件夹改为F:了。

第二步:
修改注册表:将HKEY_CURRENT_USER//Environment下的TMP值改回原来的值,
然后发送WM_SETTINGCHANGE消息,
在文件夹的地址栏上输入%TMP%, 立即生效了。

这里WM_SETTINGCHANGE的第二个参数用"Environment"字符串,这是表明是环境变量发生了改变。如果是活动桌面改变了,这个消息的第二个参数就是别的字符串。

原文地址:http://blog.csdn.net/primer_programer/article/details/2232777

HWND_BROADCAST的一个用法——修改环境变量,立即通知系统,布布扣,bubuko.com

HWND_BROADCAST的一个用法——修改环境变量,立即通知系统

标签:style   blog   http   color   文件   ar   art   问题   

原文地址:http://www.cnblogs.com/guobbs/p/3911131.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!