如何在程序中实现关联指定的文件类型
来源:互联网 发布:python源码 编辑:程序博客网 时间:2024/05/23 02:01
在日常使用电脑的过程中,我们只要双击文件夹中各种形象化的文件图标就可以直接启动相关联的软件来打开该文件(如Word文档),而不需要用户关心该用什么软件来打开此类文件。这样做不但方便了用户,同时也增加了软件的主动性及灵活性。
软件的这种功能是如何实现的呢?接下来我就为大家介绍如何在Windows环境下为自己开发的软件增加这样的功能。“玩”过Windows注册表的朋友应该都会发现在注册表的HKEY_CLASSES_ROOT主键中有很多以“.”开头的子项(如.txt),而这些子项就是最关键的开始。下面我就以文本文件(*.txt)为例来进行说明。
打开菜单“开始->运行...”,输入“regedit”来启动注册表编辑器。然后打开HKEY_CLASSES_ROOT主键找到“.txt”子项,点击后就可以在右边查看该项的有内容。在这里我们主要关心的是“(默认)”这一项,因为它的内容就是我们要找的下一个主键项。一般情况下该键值为“txtfile”,接下来继续在HKEY_CLASSES_ROOT主键中找到“txtfile”子项,双击打开该项后会出现多个子项,下面说明主要的子项的用途:
txtfile
- DefaultIcon(显示的文件图标)
- shell
- Open
- Command(用于打开该类型文件的程序路径)
- Print
- Command(用于打印该类型文件的程序路径)
有了这些信息后,只要我们在软件中修改或建立这些相关的注册表项及键值就可以实现检测、修改(新增)各种文件类型的关联了。
下面是我编写的两个函数:
bool CheckFileRelation(AnsiString, AnsiString)
void RegisterFileRelation(AnsiString, AnsiString, AnsiString, AnsiString, AnsiString)
分别用于实现检测和修改(新增)文件关联的功能,源代码如下:
//---------------------------------------------------------------------------
// 检测文件关联情况
// ExeName: 要检测的扩展名(例如: ".txt")
// AppKey: ExeName扩展名在注册表中的键值(例如: "txtfile")
// 返回true: 表示已关联,false: 表示未关联
bool __fastcall CheckFileRelation(AnsiString ExtName, AnsiString AppKey)
{
TRegistry *pReg = new TRegistry();
pReg->RootKey = HKEY_CLASSES_ROOT; // 打开主键
// 在检测到本程序不是默认的文件关联时,请用户确认该重新关联操作
pReg->OpenKey(ExtName, true);
if (pReg->ReadString("") != AppKey)
{
pReg->CloseKey();
return false;
}
pReg->CloseKey();
return true;
}
//---------------------------------------------------------------------------
// 注册文件关联
// ExeName: 要检测的扩展名(例如: ".txt")
// AppName: 要关联的应用程序名(例如: "C:\MyApp\MyApp.exe")
// AppKey: ExeName扩展名在注册表中的键值(例如: "txtfile")
// Icon: 扩展名为ExeName的图标文件(例如: "C:\MyApp\MyApp.exe, 1")
// Describe: 文件类型描述
void __fastcall RegisterFileRelation(AnsiString ExtName, AnsiString AppName,
AnsiString AppKey, AnsiString Icon, AnsiString Describe)
{
try
{
TRegistry *pReg = new TRegistry();
pReg->RootKey = HKEY_CLASSES_ROOT; // 打开主键
// 新建/打开以文件扩展名为名的项,并写入数据
pReg->OpenKey(ExtName, true);
pReg->WriteString("", AppKey);
pReg->CloseKey();
pReg->OpenKey(AppKey, true);
pReg->WriteString("", Describe);
pReg->CloseKey();
pReg->OpenKey(AppKey + "", true);
pReg->WriteString("", Icon);
pReg->CloseKey();
pReg->OpenKey(AppKey + "", true);
pReg->WriteString("", "Open");
pReg->CloseKey();
pReg->OpenKey(AppKey + "", true);
pReg->WriteString("", AppName + " %1");
pReg->CloseKey();
delete pReg;
}
catch(...)
{
MessageBox(NULL, "注册文件关联时发生错误", "注意", MB_OK|MB_ICONWARNING);
}
}
- 如何在程序中实现关联指定的文件类型
- 在程序中实现关联指定的文件类型
- Qt 如何实现文件类型关联
- grep 命令(在指定文件的文件类型中查找)
- 给自己的程序建立文件类型关联
- 如何在指定的终端会话中启动程序
- 在当前目录中所有文件中,查找,存在指定内容的指定文件类型
- 用 find 命令在指定文件类型中查找包含指定文字的文件
- 如何删除Windows Vista/Windows 7中已关联的文件类型
- 在Windows 7中彻底移除某文件类型的文件关联信息
- 取消文件类型的关联
- 注册表的文件类型关联
- Android菜鸟笔记-关联APK程序打开的文件类型:MimeType
- 文件类型关联 单例模式 用特定程序打开指定素材
- Linux-在指定文件类型中递归查找到目标字符串
- 在进程中找指定的程序
- 如何在C#中用程序执行指定的SQL脚本文件,实现自动安装创建数据库
- [python] 在ubuntu中, 如何运行指定位置的py程序
- 2013.3.23 腾讯马拉松第二届第四题 医生体检
- Android TabHost的使用
- android入门:zxing学习笔记(二)
- mysql 乱码问题解决
- android实现拍照以及上传
- 如何在程序中实现关联指定的文件类型
- Android Path Button效果实现
- HR不会告诉你的十件事
- vc++高级班之注册表篇[4]---其他类型键值的设置
- 编程统计PI前100位中0-9每个数出现的次数
- Day 19 list(frequency 4)
- Day 20 (frequency 3)
- 输出本地机器的时间Examole4_13(改)
- Datastage 中Transformer Stage:各个函数的解析