自定义文件格式注册和图标设置
我们很多时候可能会有这样的一种需求,即要生成自己的文件格式,然后将这种文件格式注册到操作系统中,双击就会使用特定的程序来打开,并且我们还想为这种文件格式设置一个图标和缩略。本文章解决的是注册文件格式和设置文件的图标,至于缩略图的设置请看我空间的另外一篇文章。
注册文件需要用到下面两个函数:
BOOL RegeditYourFile(string ExtName) { CString csKey = ExtName.c_str(); CString m_csDocumentClassName = "YourFileExtName.file"; ::GetModuleFileName(NULL, szProgPath, sizeof(szProgPath)/sizeof(TCHAR));//本执行程序的路径,用来在命令模式下也可以打开该 //类型的文件 CString csTempText; // just pass file path in quotes on command line csTempText = szProgPath; csTempText += " /"%1/""; CString m_csShellOpenCommand = csTempText; SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csDocumentClassName);//注册一个.VTemplate后缀的主键 if( !m_csShellOpenCommand.IsEmpty() ) {//注册命令模式下打开该类型文件的执行程序 csKey += "//shell//open//command"; SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csShellOpenCommand); } csKey = m_csDocumentClassName; CString m_csDocumentDescription = ""; csTempText = szProgPath; csTempText += ",1"; CString m_csDocumentDefaultIcon = csTempText; SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csDocumentDescription); // DefaultIcon if( !m_csDocumentDefaultIcon.IsEmpty() ) { csKey = m_csDocumentClassName; csKey += "//DefaultIcon"; SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csDocumentDefaultIcon); } // shell/open/command if( !m_csShellOpenCommand.IsEmpty() ) { csKey = m_csDocumentClassName; csKey += "//shell//open//command"; SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csShellOpenCommand); } return TRUE; } BOOL SetRegistryValue(HKEY hOpenKey,LPCTSTR szKey,LPCTSTR szValue,LPCTSTR szData) { // validate input if( !hOpenKey || !szKey || !szKey[0] || !szValue || !szData ) { ::SetLastError(E_INVALIDARG); return FALSE; } BOOL bRetVal = FALSE; DWORD dwDisposition; DWORD dwReserved = 0; HKEY hTempKey = (HKEY)0; // length specifier is in bytes, and some TCHAR // are more than 1 byte each DWORD dwBufferLength = lstrlen(szData) * sizeof(TCHAR); // Open key of interest // Assume all access is okay and that all keys will be stored to file // Utilize the default security attributes if( ERROR_SUCCESS == ::RegCreateKeyEx(hOpenKey, szKey, dwReserved, (LPTSTR)0, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, 0, &hTempKey, &dwDisposition) ) { // dwBufferLength must include size of terminating nul // character when using REG_SZ with RegSetValueEx function dwBufferLength += sizeof(TCHAR); if( ERROR_SUCCESS == ::RegSetValueEx(hTempKey, (LPTSTR)szValue, dwReserved, REG_SZ, (LPBYTE)szData, dwBufferLength) ) { bRetVal = TRUE; } } // close opened key if( hTempKey ) { ::RegCloseKey(hTempKey); } return bRetVal;
其中里面的原理主要是操作注册表,具体自己看。
比如,你想为自己的自定义文件格式.why注册,则可以这样子调用上面的函数:
RegeditYourFile(.why);
注册完文件格式以后,要给这种文件格式设置一个图标,这要用到下面的函数:
BOOL ModifyIcon(LPCSTR ExtName, LPCSTR IconFile) { BOOL ret; LONG nLen; char Key[65]; char buf[MAX_PATH]; nLen = sizeof(Key); if (RegQueryValue(HKEY_CLASSES_ROOT,ExtName,Key, &nLen) != ERROR_SUCCESS) return FALSE; if (Key[0]=='/0') return FALSE; strcat(Key, "//DefaultIcon"); strcpy(buf, IconFile); strcat(buf, ", 0"); ret = RegSetValue(HKEY_CLASSES_ROOT, Key, REG_SZ, buf, sizeof(buf)+1) == ERROR_SUCCESS; SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_FLUSHNOWAIT, 0, 0); return ret; }
然后你可以这样子调用:
ModifyIcon(".why","C://myicon.ico");搞定。PS:很多人从我这里学到或拿走东西,没人说句3Q,郁闷。
自定义文件格式注册和图标设置相关推荐
- jquery 自定义正方形图标_苹果ios14桌面小组件怎么改图标 更换桌面图标设置教程...
ios14小组件除了自定义桌面图片之外,还可以更换图标,使得每个软件图标都有不一样的变化,让你的桌面焕然一新,这里需要使用快捷指令来完成,ios14小组件怎么更换图标?怎么设置?下面带来介绍. ios ...
- 三个自定义图标设置,让你的iPhone可爱亿点点!
iPhone简约的图标设置一直被认为是经典,但有些朋友可能想设置自己喜欢的图标.你知道苹果手机图标设置的方法吗?你是不是见过别人可爱的锁屏设置.来电显示的可爱头像.蜂窝号码的卡通图标,这些你都会弄吗? ...
- win7注册表常用设置
win7注册表常用设置 一.总结 一句话总结:regedit可以修改很多东西,电脑时间,背景,u盘读写,鼠标右键情况. 二.win7注册表常用设置 一. 秀出自我风格的屏幕保护画面 1.气泡屏幕保护 ...
- 主题图标_Avada主题网站favicon图标设置详细图文教程
Avada主题网站favicon图标如何设置?很多网站打开后在浏览器标题栏会发现前面有一个小图标,在浏览器标签页和收藏夹中也能看到.这个标志名叫 favicon图标.ico图标.网站图标.是展示网站个 ...
- 桌面图标设计里的计算机是灰色的,小技巧教您如何将Windows 10上的桌面图标设置中的回收站为灰色!...
如果Windows 10的``桌面图标设置''窗口中的``回收站''选项显示为灰色,则可以查看本逐步指南以解决问题.这将帮助您取回"桌面图标设置"面板中的"回收站&quo ...
- dubbo简易实现_分别利用自定义的注册中心和zookeeper
2019独角兽企业重金招聘Python工程师标准>>> dubbo + (点对点型.zookeeper)整合,理解其思想,熟悉其基本流程 2017-06-25 (github地址:h ...
- echarts中自定义图片的矢量路径设置
echarts中自定义图片的矢量路径设置 在echarts象形柱图中要使用自定义的图片有三种格式,如下图: 前面两种方式我们项目中也常用到,第三种是矢量路径,如何获取这个矢量路径呢,方法如下: 第一步 ...
- win10在主题下桌面图标设置时提示windows无法访问指定设备、路径或文件问题的解决方法
win10在主题->桌面图标设置时提示:'windows无法访问指定设备.路径或文件'问题的解决方法. 问题: 心血来潮想整理下桌面图标点开 个性化>主题>桌面图标显示,发现系统提示 ...
- typecho图标_Typecho微信自定义分享插件WeChatShare 自定义标题描述小图标
前言 张小龙带领微信走进了大众的生活,在十亿用户的生活里扎根.于是我们不管是阅读.聊天.看视频,基本上都离不开微信.好东西分享给用户,第一时间想到的肯定是微信. 很久以前,一个网页分享到微信聊天,系统 ...
最新文章
- Windows Internals 笔记——关联性
- Arithmetic Sequence 三分,货仓选址,nth_element,__int128(济南)
- 《剑指offer》-- 两个链表的第一个公共结点、链表中环的入口结点、删除链表中的重复结点
- 通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
- epoll socket 服务端中read和write的返回值讨论
- 【并查集】打击犯罪(ssl 2342)
- 【WebRTC---进阶篇】(六)SELECT网络模型
- 让nginx 支持 pathinfo ,支持thinkphp
- Castle ActiveRecord学习实践(6):延迟加载和使用Where子句
- 如何搞定知乎模拟登陆的加密难题?
- 【前端】数字媒体技术专业主要课程及就业方向
- Atitit 路由器下面的网络o多个路由器配置 因为存在多个dhcp 所以,不能网有时.. 更改主要的路由路由器 88.88 这样不能ip冲突..and 外部的的dhcp 范围... 在的
- 代码设置textField和textView的border和borderColor
- Radio Dream流媒体直播平台基于Docker的应用
- python 兼职多少钱一小时_无印良品兼职一小时多少钱?看完后就清楚了!
- 【HTML系列】第二章 · HTML基础
- 倾角传感器精度校准检测
- 目标管理之SMART原则
- OGRE渲染引擎之地形、天空和雾
- 人工神经网络算法实战教程
热门文章
- 【图像处理】基于matlab GUI多功能图像处理系统【含Matlab源码 1876期】
- 【故障检测】基于 KPCA 的故障检测研究(Matlab代码实现)
- postman工具批量调用接口
- Android 音乐裁剪器
- 中国信通院:5G无人机应用白皮书
- 【疑难杂症】Oculus Quest2 手机配对时找不到5-digit-code
- Ubuntu忘记超级用户root密码,重新设置密码
- 东北大学计算机硬件题库,东北大学20春学期《计算机硬件技术基础》在线平时作业123答案100...
- 在2018年使用xp是怎样的体验
- Matlab小课堂3