文件关联后即时生效代码
关于 文件关联后即时生效的问题,也就是关联图标即时生效
在网上找了半天,大部分都是修改注册表再广播消息:
- 修改注册表:HKEY_CURRENT_USER 项下的
Control Panel\\Desktop\\WindowMetrics 的 Shell Icon Size 的值 -1; - 广播消息;
- 还原 Shell Icon Size 的值;
- 再次广播消息;
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'
解决的方式:
- 将 头文件 shlobj.h 放在 CPP 文件中;
- 在CPP文件顶部加上 #define NO_WIN32_LEAN_AND_MEAN;
- 效果如下:
#define NO_WIN32_LEAN_AND_MEAN
#include <vcl.h>
#pragma hdrstop#include "Unit1.h"#include <shlobj.h>
文件关联后即时生效代码相关推荐
- linux etc profile生效,让/etc/profile文件修改后立即生效
满意答案 姗姗860411 2016.09.02 采纳率:53% 等级:10 已帮助:1968人 让/etc/profile文件修改后立即生效方法1: www.dnjsb.com 让/etc/p ...
- hosts文件修改后不生效
电脑:win7 64位.最近做项目需要修改hosts文件来映射,可是修改后,hosts文件的映射并不生效.网上的方法试了好多,都不行. 比如:以ascII编码的形式保存hosts,修改注册表,关闭dn ...
- Jsp文件修改后不生效怎么办?
修改Jsp界面并保存,然而在浏览器里面却始终不生效,清缓存重启Tomcat都没用,网上搜了挺久,大多都是说缓存的问题,偶然看到有个前辈提了下文件修改时间的问题,由于某些原因,我确实把系统时间给改了 ...
- tomcat html文件修改后没生效,Tomcat-页面访问时新Jsp未生效
现网-更新jsp后,为什么有些服务器能拿到新页面,而有些服务器获取的是旧页面,为什么有些服务器什么事也不干隔断时间就自动能看新页面啦? 你需要懂的Tomcat-生成jsp的.class文件的原理,以及 ...
- /etc/hosts文件修改后如何生效
修改/etc/hosts之后正常情况应该是保存之后立即生效的,但是有时不是.使用uname -a 可以查看hostname是多少,就可以知道是否修改生效了.如果没有 这时的策略有: 1)重启机器 2) ...
- hosts文件修改后 如何生效
覆盖后,让hosts生效 Windows 开始 -> 运行 -> 输入cmd -> 在CMD窗口输入 : ipconfig /flushdnsLinux 终端输入 : sudo rc ...
- linux修改文件信息失败怎么办,【Linux】Linux修改openfiles后不生效问题?
#次故障问题环境背景: Centos7.4物理机,升级过ssh和ntp: #一般只需要在此文件后面添加4行就行,配置后即可生效(exit再次登录即可生效),此次配置后没生效,reboot还是没生效,在 ...
- 修改配置文件后不重启程序即时生效
SIGHUP信号与控制终端 -------------------------------------------------------------------------------------- ...
- Eclipse中Tomcat 修改后台代码即时生效
修改类后不用重启Tomcat就能自动生效,对于提高开发效率的帮助很大. server.xml 中节点定义时一般会有如下配置: <Context docBase="test1" ...
- windows 文件关联图标的设置方法 (附部分代码)
windows文件关联图标的查看与设置, 主要是通过注册表实现的. 举例来说, .cpp文件的关联图标. 首先, 打开注册表: HKCR/.cpp, 如下图. 看红框部分, "默认" ...
最新文章
- Python:Scrapy 框架简单介绍
- ViewPager+RadioGroup实现标题栏切换,Fragment切换
- HTTP Session、Cookie机制详解
- .NET Core3发布Json API
- 仿芒果TV微信小程序
- python + selenium - selenium常用元素定位
- 开发环境、测试环境、生产环境
- ProtoBuf与JSON
- linux设备驱动归纳总结(三):5.阻塞型IO实现【转】
- 虚拟机体验NAS私人云(第四篇):虚拟机安装群晖DSM7.01系统(附赠新版DS918+和DS3615xs启动映像)
- 微信小程序笔记——滚动计数器
- 两张图轻松搞懂 二进制 八进制 十进制 十六进制 之间的转换关系
- Android图形绘制之——简单的几何图形
- 用python实现闯越顶岗实习签到
- 推荐几款基于 Markdown 在线制作简历的网站
- luogu 1757 分组背包
- 道闸雷达感应技术使用,智能感应存在,飞睿科技毫米波雷达
- 【Maven】你好,Maven >>> 与Maven的初次见面~
- 网易2018编程题之游历魔法王国
- oracle禁用amm,[20180211]11g关闭AMM.txt
热门文章
- linux系统开机自动锁定键盘,设置linux开机启动小键盘的详细教程设置linux开机启动小键盘的图文教程...
- solidity投票(ballot)合约
- Vue项目引入移动端组件库--Mand Mobile
- 免流发展史-三大运营商
- h5让图片转圈的动效,让页面动起来
- 计算机英文积累(一)
- 海康威视错误代码0xf_海康威视视频智能分析整理文档
- 山型组合数c语言,(人教版)高中数学选修2-3课件:组合与组合数公式自主学习...
- 10个问题说清楚 什么是元宇宙 - 十问元宇宙:如何将抽象的概念具象化?
- 火狐Android 附加组件,Firefox Nightly 隐藏新功能,让 Android 机用上任意桌面端附加组件...