二、文件协助(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示例代码:

.reg

REGEDIT4

[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:

SHChangeNotify

#include <Windows.h>
#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)相关推荐

  1. windows API 串口编程参考

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  2. 28、Windows API Shell任务栏通知区域(Tray)图标

    使用了通知区域图标的程序应该是图形用户界面的程序,具有窗口,和一般的窗口程序一样,应该创建一个主窗口,并处理窗口消息. 一.相关API 1.Shell_NotifyIcon Sends a messa ...

  3. Windows API函数速查

    http://blog.csdn.net/ghevinn/article/details/8213614 Windows API函数速查 1. API之网络函数 WNetAddConnection 创 ...

  4. (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单

    (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单 原文 (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu ...

  5. Windows Shell 编程 第六章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987951】...

    第六章 快捷方式的最短路径 Windows Shell允许存储任何对象的引用到系统范围内的任何地点.例如,当你从一个文件夹拖拽可执行程序到另一个文件夹时,鼠标自动改变形状给出除拷贝和移动文件之外的第三 ...

  6. [转]Windows Shell编程 第十五章【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988016】...

    第十五章 SHELL扩展 谈到Windows Shell编程,Shell扩展是最重要的科目之一,绝大多数商业应用的最酷特征的都是通过Shell扩展实现的,而且有许多显著的系统特征实际都是插入了扩展代码 ...

  7. 视频教程-精通Win32 API编程-Windows图形界面编程-C/C++

    精通Win32 API编程-Windows图形界面编程 黄强老师,国家软件设计师,软件开发工程师,项目经理.产品经理.培训讲师. 创业合伙人,多年C.C++开发经验,尤擅长移动互联网项目的开发! 黄强 ...

  8. windows shell 编程

    第十五章 SHELL扩展 谈到Windows Shell编程,Shell扩展是最重要的科目之一,绝大多数商业应用的最酷特征的都是通过Shell扩展实现的,而且有许多显著的系统特征实际都是插入了扩展代码 ...

  9. windows编程之Windows Shell 编程

    这里仅仅是记录下该资源,推荐到下文列出的连接进行查看 用VC++ 进行Windows Shell 扩展编成 由ccc编译 序言: 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用wi ...

最新文章

  1. 科学计算机撤销,云计算环境下基于属性的撤销方案-计算机科学.PDF
  2. pytorch注意事项
  3. VS 之 InstallShield Limited Edition for Visual Studio 2015 图文教程
  4. Hadoop HDFS概念学习系列之shell命令使用HDFS的一些其他命令(十九)
  5. Web前端开发笔记——第四章 JavaScript程序设计 第二节 变量
  6. win10格式化linux分区,直接删除linux分区再重装linux可以恢復启动么,我是直接在win10里把linux mint...
  7. windows执行oracle脚本,Windows下通过计划任务执行数据库备份脚本
  8. 视频盒子APP视频播放源代码安卓+IOS双端源码
  9. net java互相调用_Java与.NET的WebServices相互调用
  10. C# const与readonly的用法和区别解析(转)
  11. oppoJava面试题,java开发个人博客教程
  12. oracle服务器文件路径,ORACLE 数据库如何通过修改数据文件路径进行数据迁移
  13. Waiting Processed Cancelable ShowDialog (Release 2)
  14. 网络规划设计师教程知识点精讲之计算机网络汇总
  15. GitHub使用技巧,在线ide编辑代码、在线运行代码、快速查找阅读代码
  16. DNS详解,权威DNS,递归DNS,转发DNS,公共DNS
  17. mysql远程备份_mysql实现自动远程备份一办法
  18. css3边框背景border-image
  19. 正睿(比赛--Day10)
  20. 录音转文字软件哪个好?推荐这三款软件给你

热门文章

  1. python爬取个人信息_Python爬取个人支付宝朋友信息操作示例
  2. 神策数据推荐系统:中文关键词提取新模型
  3. 深度学习的研究方向: 你会为AI转型么?
  4. [科研论文]基于W7100的以太网读卡器的设计与实现
  5. 凸函数、凸规划的定义及学习
  6. php xampp 安装yaf,在apache中,yaf访问yaf,apache会异常退出是为何?
  7. 【Java编程思想笔记】-集合1
  8. Docker基本使用(一)
  9. oracle 空间数据库说明
  10. go语言学习笔记(5)数组与切片