26、Windows API Shell编程(2)
二、文件协助(File Associations)
File Associations可以指定Shell在显示、处理特定文件类型的文件时的方式,包括如下几个方面:
◇双击文件时,哪个应用程序应该被用来打开这个文件;
◇文件的图标;
◇在Explorer中浏览时显示的文件类型等;
◇文件的右键菜单中显示的指令(菜单项);
◇一些用户界面细节,比如当鼠标指针停留在图标上时所弹出的提示信(Infotip)。
与File Associations相关的一个重要概念是“文件类型”,每一种文件类型对应特定的文件扩展名。为了使Shell (Explorer.exe)能够正确识别文件类型,需要在注册表中进行相关的注册。只有在注册表中正确注册了的文件类型Shell才知道如何选择文件的图标、如何指定双击文件时打开文件所需的应用程序。
1、文件类型相关注册表键值
1)文件类型
具有同一种文件扩展名的文件属于同一个文件类型。如果需要Shell识别这种文件类型,需要在注册表中注册。注册一个文件类型包括两个方面,一是在HKEY_CLASSES_ROOT设置扩展名子键,并将默认值设置为文件扩展名对应的ProgID (Programmatic Identifiers,可编程标识符);二是在HKEY_CLASSES_ROOT键值下建立ProgID子键,并设置相关属性。
2)扩展名键
HKEY_CLASSES_ROOT的扩展名子键除了默认键值应为ProgID,还可以设置其他键值或子键。包括PerceivedType和Content Type键值和penWithProgids和OpenWithList子键等。
OpenWithList和OpenWithProgids子键分别设置了“打开方式”列表和“打开方式”-“选择程序”对话框中可选的项。
3)可编程标识符
ProgID有多种子键:DefaultIcon、CurVer、shell、shellex等,还具有多种键值InfoTip、FriendlyTypeName等。
ProgID的默认键值指定了文件类型的描述;InfoTip键值指定了用户将鼠标指针移动到该种类型的文件时,所弹出的提示信息。
DefaultIcon子键指定了该种文件类型的默认图标。CurVer指明了当前版本。
shell子键包括若干的命令处理程序(Handler),有一些默认Handler(open、play等)也可以注册自定义的Handler。
shellex中包括若干Shell扩展的Handler,用于新加右键菜单项、文件拖曳菜单、图标、属性对话框、提示对话框等,包括Context Menu handler、Data handler、Drop handler、Icon handler、Property sheet handler、Infotip handler、Copy hook handler等类型。
2、为文件指定默认打开程序
通过注册表可以为特定文件类型的文件指定默认打开的程序。指定默认打开程序后,在exploerer.exe中双击或选择“右键一打开”就可以打开文件。
如下reg示例代码:
[HKEY_CLASSES_ROOT\.win]
@="WINFile"
[HKEY_CLASSES_ROOT\WINFile]
@="File Type Example"
[HKEY_CLASSES_ROOT\WINFile\DefaultIcon]
@="shell32.dll,-152"
[HKEY_CLASSES_ROOT\WINFile\shell\open\command]
@ = "NOTEPAD.EXE %1"
通过以上方法。可以向Shell注册一个新的文件类型。但是直接修改注册表键值后,explorer.exe并不会立即关联到新的设置。所以需要注销重新登录,以重启explorer.exe。
SHChangeNotify函数可以使explorer.exe重新加载注册表设置,用户不用重新登录,新注册的文件类型就可以生效。使用如下参数调用SHChangeNotify:
#include <shlobj.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
WinExec("regedit win.reg", nCmdShow);
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
}
参考
[1] 精通Windows API 函数、接口、编程实例
[2] http://msdn.microsoft.com/en-us/library/bb773177%28VS.85%29.aspx
转载于:https://www.cnblogs.com/mydomain/archive/2011/02/19/1958500.html
26、Windows API Shell编程(2)相关推荐
- windows API 串口编程参考
*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...
- 28、Windows API Shell任务栏通知区域(Tray)图标
使用了通知区域图标的程序应该是图形用户界面的程序,具有窗口,和一般的窗口程序一样,应该创建一个主窗口,并处理窗口消息. 一.相关API 1.Shell_NotifyIcon Sends a messa ...
- Windows API函数速查
http://blog.csdn.net/ghevinn/article/details/8213614 Windows API函数速查 1. API之网络函数 WNetAddConnection 创 ...
- (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单
(C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单 原文 (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu ...
- Windows Shell 编程 第六章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987951】...
第六章 快捷方式的最短路径 Windows Shell允许存储任何对象的引用到系统范围内的任何地点.例如,当你从一个文件夹拖拽可执行程序到另一个文件夹时,鼠标自动改变形状给出除拷贝和移动文件之外的第三 ...
- [转]Windows Shell编程 第十五章【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988016】...
第十五章 SHELL扩展 谈到Windows Shell编程,Shell扩展是最重要的科目之一,绝大多数商业应用的最酷特征的都是通过Shell扩展实现的,而且有许多显著的系统特征实际都是插入了扩展代码 ...
- 视频教程-精通Win32 API编程-Windows图形界面编程-C/C++
精通Win32 API编程-Windows图形界面编程 黄强老师,国家软件设计师,软件开发工程师,项目经理.产品经理.培训讲师. 创业合伙人,多年C.C++开发经验,尤擅长移动互联网项目的开发! 黄强 ...
- windows shell 编程
第十五章 SHELL扩展 谈到Windows Shell编程,Shell扩展是最重要的科目之一,绝大多数商业应用的最酷特征的都是通过Shell扩展实现的,而且有许多显著的系统特征实际都是插入了扩展代码 ...
- windows编程之Windows Shell 编程
这里仅仅是记录下该资源,推荐到下文列出的连接进行查看 用VC++ 进行Windows Shell 扩展编成 由ccc编译 序言: 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用wi ...
最新文章
- 科学计算机撤销,云计算环境下基于属性的撤销方案-计算机科学.PDF
- pytorch注意事项
- VS 之 InstallShield Limited Edition for Visual Studio 2015 图文教程
- Hadoop HDFS概念学习系列之shell命令使用HDFS的一些其他命令(十九)
- Web前端开发笔记——第四章 JavaScript程序设计 第二节 变量
- win10格式化linux分区,直接删除linux分区再重装linux可以恢復启动么,我是直接在win10里把linux mint...
- windows执行oracle脚本,Windows下通过计划任务执行数据库备份脚本
- 视频盒子APP视频播放源代码安卓+IOS双端源码
- net java互相调用_Java与.NET的WebServices相互调用
- C# const与readonly的用法和区别解析(转)
- oppoJava面试题,java开发个人博客教程
- oracle服务器文件路径,ORACLE 数据库如何通过修改数据文件路径进行数据迁移
- Waiting Processed Cancelable ShowDialog (Release 2)
- 网络规划设计师教程知识点精讲之计算机网络汇总
- GitHub使用技巧,在线ide编辑代码、在线运行代码、快速查找阅读代码
- DNS详解,权威DNS,递归DNS,转发DNS,公共DNS
- mysql远程备份_mysql实现自动远程备份一办法
- css3边框背景border-image
- 正睿(比赛--Day10)
- 录音转文字软件哪个好?推荐这三款软件给你