博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HWND_BROADCAST的一个用法——修改环境变量,立即通知系统
阅读量:4881 次
发布时间:2019-06-11

本文共 827 字,大约阅读时间需要 2 分钟。

在编程时遇到一个问题: 

就是程序通过修改注册表,修改了系统的环境变量,但是不会立即生效,除非在【我的电脑】上点击右键,然后打开环境变量的窗口,点击【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

转载于:https://www.cnblogs.com/guobbs/p/3911131.html

你可能感兴趣的文章
Python之路,Day21 - 常用算法学习
查看>>
Android安全-代码安全1-ProGuard混淆处理
查看>>
部署core
查看>>
mysql 时间设置
查看>>
如何在 Xcode 中修改应用的名字
查看>>
有关交换机——熟悉原理是必须的【转载】
查看>>
ACM(数学问题)——UVa202:输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。...
查看>>
【转】Android 读取doc文件
查看>>
js 数据绑定
查看>>
jsp的C标签一般使用方法以及js接收servlet中的对象及对象数字
查看>>
H5 简介
查看>>
window.frameElement的使用
查看>>
nl命令
查看>>
如何使用jQuery $.post() 方法实现前后台数据传递
查看>>
Using Flash Builder with Flash Professional
查看>>
jsp/post中文乱码问题
查看>>
C# 插入或删除word分页符
查看>>
数据库数据的查询----连接查询
查看>>
找不到可安装的ISAM ,asp.net读取数据丢失,解决的一列里有字符与数字的
查看>>
Java学习笔记三(对象的基本思想一)
查看>>