关于 文件关联后即时生效的问题,也就是关联图标即时生效

在网上找了半天,大部分都是修改注册表再广播消息:

  1. 修改注册表:HKEY_CURRENT_USER 项下的
    Control Panel\\Desktop\\WindowMetrics  的  Shell Icon Size 的值 -1;
  2. 广播消息;
  3. 还原 Shell Icon Size 的值;
  4. 再次广播消息;
   int nSize = GetSystemMetrics(SM_CXICON);HKEY   hKey;RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop\\WindowMetrics", 0, KEY_ALL_ACCESS, &hKey);char   szBuff[20];itoa(nSize-1, szBuff,10);RegSetValueEx(hKey, "Shell Icon Size", 0, REG_SZ, (unsigned char*)szBuff, sizeof(szBuff)*2);SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, NULL);// 问题就出在这里,SendMessage 后,程序就无响应,应该是某些窗口不处理接收的消息,// 导致 SendMessage无返回,故程序不响应了itoa(nSize, szBuff,10);RegSetValueEx(hKey, "Shell Icon Size", 0, REG_SZ,(unsigned char*)szBuff, sizeof(szBuff)*2);SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, NULL);RegCloseKey(hKey);

以上代码,有些机子是没法通过,会造成程序无响应。

之后发现了  SHChangeNotify 这个API,调用后,即时有效。

API  SHChangeNotify

SHChangeNotify( SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0 );

注意:C++ Builder 6.0

调用 SHChangeNotify 时,它的头文件是 shlobj.h, 但是编绎的时候发现有头文件 shlobj.h 与 shobjidl.h 重复定义;

  [C++ Error] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS'[C++ Error] shobjidl.h(8095): E2238 Multiple declaration for 'DESKBANDINFO'[C++ Error] shlobj.h(1422): E2238 Multiple declaration for 'FVSHOWINFO'[C++ Error] shlobj.h(3457): E2238 Multiple declaration for 'SHELLFLAGSTATE'

解决的方式:

  1. 将 头文件 shlobj.h 放在 CPP 文件中;
  2. 在CPP文件顶部加上  #define NO_WIN32_LEAN_AND_MEAN;
  3. 效果如下:
#define NO_WIN32_LEAN_AND_MEAN
#include <vcl.h>
#pragma hdrstop#include "Unit1.h"#include <shlobj.h>

文件关联后即时生效代码相关推荐

  1. linux etc profile生效,让/etc/profile文件修改后立即生效

    满意答案 姗姗860411 2016.09.02 采纳率:53%    等级:10 已帮助:1968人 让/etc/profile文件修改后立即生效方法1: www.dnjsb.com 让/etc/p ...

  2. hosts文件修改后不生效

    电脑:win7 64位.最近做项目需要修改hosts文件来映射,可是修改后,hosts文件的映射并不生效.网上的方法试了好多,都不行. 比如:以ascII编码的形式保存hosts,修改注册表,关闭dn ...

  3. Jsp文件修改后不生效怎么办?

      修改Jsp界面并保存,然而在浏览器里面却始终不生效,清缓存重启Tomcat都没用,网上搜了挺久,大多都是说缓存的问题,偶然看到有个前辈提了下文件修改时间的问题,由于某些原因,我确实把系统时间给改了 ...

  4. tomcat html文件修改后没生效,Tomcat-页面访问时新Jsp未生效

    现网-更新jsp后,为什么有些服务器能拿到新页面,而有些服务器获取的是旧页面,为什么有些服务器什么事也不干隔断时间就自动能看新页面啦? 你需要懂的Tomcat-生成jsp的.class文件的原理,以及 ...

  5. /etc/hosts文件修改后如何生效

    修改/etc/hosts之后正常情况应该是保存之后立即生效的,但是有时不是.使用uname -a 可以查看hostname是多少,就可以知道是否修改生效了.如果没有 这时的策略有: 1)重启机器 2) ...

  6. hosts文件修改后 如何生效

    覆盖后,让hosts生效 Windows 开始 -> 运行 -> 输入cmd -> 在CMD窗口输入 : ipconfig /flushdnsLinux 终端输入 : sudo rc ...

  7. linux修改文件信息失败怎么办,【Linux】Linux修改openfiles后不生效问题?

    #次故障问题环境背景: Centos7.4物理机,升级过ssh和ntp: #一般只需要在此文件后面添加4行就行,配置后即可生效(exit再次登录即可生效),此次配置后没生效,reboot还是没生效,在 ...

  8. 修改配置文件后不重启程序即时生效

    SIGHUP信号与控制终端 -------------------------------------------------------------------------------------- ...

  9. Eclipse中Tomcat 修改后台代码即时生效

    修改类后不用重启Tomcat就能自动生效,对于提高开发效率的帮助很大. server.xml 中节点定义时一般会有如下配置: <Context docBase="test1" ...

  10. windows 文件关联图标的设置方法 (附部分代码)

    windows文件关联图标的查看与设置, 主要是通过注册表实现的. 举例来说, .cpp文件的关联图标. 首先, 打开注册表: HKCR/.cpp, 如下图. 看红框部分, "默认" ...

最新文章

  1. Python:Scrapy 框架简单介绍
  2. ViewPager+RadioGroup实现标题栏切换,Fragment切换
  3. HTTP Session、Cookie机制详解
  4. .NET Core3发布Json API
  5. 仿芒果TV微信小程序
  6. python + selenium - selenium常用元素定位
  7. 开发环境、测试环境、生产环境
  8. ProtoBuf与JSON
  9. linux设备驱动归纳总结(三):5.阻塞型IO实现【转】
  10. 虚拟机体验NAS私人云(第四篇):虚拟机安装群晖DSM7.01系统(附赠新版DS918+和DS3615xs启动映像)
  11. 微信小程序笔记——滚动计数器
  12. 两张图轻松搞懂 二进制 八进制 十进制 十六进制 之间的转换关系
  13. Android图形绘制之——简单的几何图形
  14. 用python实现闯越顶岗实习签到
  15. 推荐几款基于 Markdown 在线制作简历的网站
  16. luogu 1757 分组背包
  17. 道闸雷达感应技术使用,智能感应存在,飞睿科技毫米波雷达
  18. 【Maven】你好,Maven >>> 与Maven的初次见面~
  19. 网易2018编程题之游历魔法王国
  20. oracle禁用amm,[20180211]11g关闭AMM.txt

热门文章

  1. linux系统开机自动锁定键盘,设置linux开机启动小键盘的详细教程设置linux开机启动小键盘的图文教程...
  2. solidity投票(ballot)合约
  3. Vue项目引入移动端组件库--Mand Mobile
  4. 免流发展史-三大运营商
  5. h5让图片转圈的动效,让页面动起来
  6. 计算机英文积累(一)
  7. 海康威视错误代码0xf_海康威视视频智能分析整理文档
  8. 山型组合数c语言,(人教版)高中数学选修2-3课件:组合与组合数公式自主学习...
  9. 10个问题说清楚 什么是元宇宙 - 十问元宇宙:如何将抽象的概念具象化?
  10. 火狐Android 附加组件,Firefox Nightly 隐藏新功能,让 Android 机用上任意桌面端附加组件...