下面这段话是百度百科对文件关联的解释。

  文件关联就是将一种类型的文件与一个可以打开它的程序建立起一种依存关系。举个例子来说,位图文件(BMP文件)在Windows中的默认关联程序画图,如果将其默认关联改为用ACDSee程序来打开,那么ACDSee就成了它的默认关联程序。

  实际上就是设置一种文件的默认打开方式。

  文件关联的信息都写在注册表里,需要写入/修改注册表信息来实现文件关联。

  下面给出如何设置一种文件的默认打开程序及显示的图标的代码。

  文件关联的两个简单函数:

// 检测文件关联情况

// strExt: 要检测的扩展名(例如: ".txt")

// strAppKey: ExeName扩展名在注册表中的键值(例如: "txtfile")

// 返回TRUE: 表示已关联,FALSE: 表示未关联

BOOL CheckFileRelation(const char *strExt, const char *strAppKey)

{

    int nRet=FALSE;

    HKEY hExtKey;

    char szPath[_MAX_PATH];

    DWORD dwSize=sizeof(szPath);

    if(RegOpenKey(HKEY_CLASSES_ROOT,strExt,&hExtKey)==ERROR_SUCCESS)

    {

        RegQueryValueEx(hExtKey,NULL,NULL,NULL,(LPBYTE)szPath,&dwSize);

        if(_stricmp(szPath,strAppKey)==)

        {

            nRet=TRUE;

        }

        RegCloseKey(hExtKey);

        return nRet;

    }

    return nRet;

}

//---------------------------------------------------------------------------

// 注册文件关联

// strExe: 要检测的扩展名(例如: ".txt")

// strAppName: 要关联的应用程序名(例如: "C:\MyApp\MyApp.exe")

// strAppKey: ExeName扩展名在注册表中的键值(例如: "txtfile")

// strDefaultIcon: 扩展名为strAppName的图标文件(例如: "C:\MyApp\MyApp.exe,0")

// strDescribe: 文件类型描述

void RegisterFileRelation(char *strExt, char *strAppName, char *strAppKey, char *strDefaultIcon, char *strDescribe)

{

    char strTemp[_MAX_PATH];

    HKEY hKey;

    RegCreateKey(HKEY_CLASSES_ROOT,strExt,&hKey);

    RegSetValue(hKey,"",REG_SZ,strAppKey,strlen(strAppKey)+);

    RegCloseKey(hKey);   

    RegCreateKey(HKEY_CLASSES_ROOT,strAppKey,&hKey);

    RegSetValue(hKey,"",REG_SZ,strDescribe,strlen(strDescribe)+);

    RegCloseKey(hKey);

    sprintf(strTemp,"%s\\DefaultIcon",strAppKey);

    RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);

    RegSetValue(hKey,"",REG_SZ,strDefaultIcon,strlen(strDefaultIcon)+);

    RegCloseKey(hKey);

    sprintf(strTemp,"%s\\Shell",strAppKey);

    RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);

    RegSetValue(hKey,"",REG_SZ,"Open",strlen("Open")+);

    RegCloseKey(hKey);

    sprintf(strTemp,"%s\\Shell\\Open\\Command",strAppKey);

    RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);

    sprintf(strTemp,"%s \"%%1\"",strAppName);

    RegSetValue(hKey,"",REG_SZ,strTemp,strlen(strTemp)+);

    RegCloseKey(hKey);

}

//使用这两个函数进行关联的示例代码

char strExt[] = ".REC";

char strAppKey[] = "WellTest.REC.1.0";         

BOOL relationExists = CheckFileRelation(strExt, strAppKey);

if(!relationExists)

{
  char strAppName[MAX_PATH + ] = "C:\\WellTest\\trunk\\bin\\WellTest.exe"; char strDefaultIcon[MAX_PATH + ] = "C:\\WellTest\\trunk\\bin\\WellTest.exe,0"; char strDescribe[] = "WellTest Interpretation Files"; RegisterFileRelation(strExt, strAppName, strAppKey, strDefaultIcon, strDescribe); }

C++实现文件关联的更多相关文章

  1. VC++6.0文件关联问题的解决方法

    最近我的电脑*.c文件关联失败,无法实现双击*.c打开vc++6.0,感觉特别不爽. 在经过自己的琢磨研究后,终于找到了解决方法. 特此分享下,希望可以帮到遇到同样问题的你. 核心内容: 1.& ...

  2. windows文件关联、打开方式列表之修改注册表攻略

    这里全是修改注册表的方式.网上找了半天,有的仅有添加文件关联的方法,却没有添加到打开方式列表里面的方法:有的有添加到文件列表的方法,却是使 用控制面板->文件夹选项的.好难得才找齐所有,从添加文 ...

  3. Ubuntu修改文件关联

    * 在system setting>details中可以设置一部分文件关联,很弱很破. * 右键open with只能临时选择打开方式,并且可选的打开方式十分有限.如果是自己编的程序,在列表中没 ...

  4. 。net 添加或获取文件关联

    文件关联设置 2011-02-07 14:25:36|  分类: VB.net2008或2010 |  标签:文件关联  |举报|字号 订阅     原理:以后缀名为.txt为例 方式一: 1.在注册 ...

  5. exe文件打开方式(恢复EXE文件关联)

    文件关联损坏常常是计算机病毒造成的,目前网络上有很多相关修复工具,相对来说,System Repair Engineer 支持的修复格式是比较齐全的,这个工具可以在http://www.kztechs ...

  6. Delphi实现文件关联

    文件关联为我们带来很多的方便.Delphi自带有注册表对象TRegistry,可以通过它取得或改变注册表相关键值的内容. Function GetAssociatedExec(FileExt: Str ...

  7. 用Delphi实现文件关联

      文件关联为我们带来很多的方便.Delphi自带有注册表对象TRegistry,可以通过它取得或改变注册表相关键值的内容. Function GetAssociatedExec(FileExt: S ...

  8. 痞子衡嵌入式:ARM Cortex-M文件那些事(0)- 文件关联

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的文件关联. 本篇是文件系列第一篇,本系列文章会逐一介绍ARM Cortex-M开发过程中(以IAR集成开发环境为例,其他开发 ...

  9. macOS上实现Qt应用程序做文件关联打开

    一.背景介绍 用Qt开发的应用程序要实现文件关联,双击时用默认关联的程序打开文件,在Windows上这个功能非常容易实现.Windows应用程序在安装的时候可以在注册表中写入相关的键值对.打开文件的时 ...

  10. 转载:实现MATLAB2016a和M文件关联

    转载自http://blog.csdn.net/qq_22186119 新安装MATLAB2016a之后,发现MATLAB没有和m文件关联 每次打开m文件后都会重新打开一次MATLAB主程序 后来发现 ...

随机推荐

  1. ajax回调中window.open弹出的窗口会被浏览器拦截的解决方法

    存在问题:处理页面ajax请求过程中,异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法 来实现,最终都被浏览器拦截了.不会跳到对应的页面,如下 原因:浏览器之所以拦截 ...

  2. 14、高可用keepalived搭建及切换

    keepalived主从切换试验: 1.先搭建192.168.1.20与192.168.1.21的主主架构     192.168.1.76为VIP 2.在2机都安装keepalived  tar - ...

  3. 第三天 ThinkPHP手把手高速拼接站点(三)

    6月1日,小雨." 梅子金黄杏子肥,麦花雪白菜花稀. 日长篱落无人过,唯有蜻蜓蛱蝶飞." 七.MVC模式 ThinkPHP的MVC开发机制例如以下: M  Model层    模型 ...

  4. OpenGL ES 3.0之Fragment buffer objects(FBO)详解 (转)

    http://www.cnblogs.com/salam/p/4957250.html 片段操作图 这篇文章将介绍从写入帧缓冲和读取帧缓冲的方式. Buffers(缓冲) OpenGL ES支持三种缓 ...

  5. Technique Standard

    http://blog.csdn.net/cnjet/article/details/73433903 jinyaping

  6. Github:在Github上创建自己的代码仓库

    Github是一个分布式版本控制系统,最初由Linux之父Linus Torvalds编写,在云时代的今天已经成为了开发者管理代码和发现已有代码的最常用工具之一,下面我们将开始git之旅. 注册Git ...

  7. 为Linux上FireFox安装Flash插件

    废话少说,步骤如下: 1.点击网页上插件缺失处,根据提示下载tar.gz版本的插件,我下载的版本是install_flash_player_11_linux.i386.tar.gz,这个文件被下载到了 ...

  8. docker入门——镜像简介

    什么是docker镜像 Docker镜像是由文件系统叠加而成. 最底端是一个引导文件系统,即bootfs: 这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永远不会和引导文件系统有 ...

  9. hdu - 4782 - Beautiful Soup(模拟)

    题意:输出一堆乱排版的html标签,去多余空字符,转换为按缩进输出. 题目链接:pid=4782">http://acm.hdu.edu.cn/showproblem.php?pid= ...

  10. 【Python3 爬虫】09_正则表达式(re.math()、re.search()、re.sub()、全局匹配函数)

    re.math()函数 从源字符串的起始位置匹配一个模式 语法:re.match(pattern, string, flag) 第一个参数代表对应的正则表达式,第二个参数代表对应的源字符,第三个参数是 ...