码迷,mamicode.com
首页 > 编程语言 > 详细

C++实现添加文件关联的方法

时间:2017-10-14 21:19:38      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:style   关联   trap   roo   value   path   adc   ati   scribe   

// 检测文件关联情况
// 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) == 0)
                {
                        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) + 1);
        RegCloseKey(hKey);
        RegCreateKey(HKEY_CLASSES_ROOT, strAppKey, &hKey);
        RegSetValue(hKey, "", REG_SZ, strDescribe, strlen(strDescribe) + 1);
        RegCloseKey(hKey);
        sprintf(strTemp, "%s\\DefaultIcon", strAppKey);
        RegCreateKey(HKEY_CLASSES_ROOT, strTemp, &hKey);
        RegSetValue(hKey, "", REG_SZ, strDefaultIcon, strlen(strDefaultIcon) + 1);
        RegCloseKey(hKey);
        sprintf(strTemp, "%s\\Shell", strAppKey);
        RegCreateKey(HKEY_CLASSES_ROOT, strTemp, &hKey);
        RegSetValue(hKey, "", REG_SZ, "Open", strlen("Open") + 1);
        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) + 1);
        RegCloseKey(hKey);
}

//测试代码
//增加注册表关联
        char strExt[10] = ".car";
        char strAppKey[30] = "FW_readcar.1.0";
        BOOL relationExists = CheckFileRelation(strExt, strAppKey);
        if (!relationExists)
        {
                char strAppName[MAX_PATH + 1] = {0};
                strcpy(strAppName,argv[0]);
                char strDefaultIcon[MAX_PATH + 1] = "";
                char strDescribe[100] = "WellTest Interpretation Files";
                RegisterFileRelation(strExt, strAppName, strAppKey, strDefaultIcon, strDescribe);
        }

 

C++实现添加文件关联的方法

标签:style   关联   trap   roo   value   path   adc   ati   scribe   

原文地址:http://www.cnblogs.com/nalanhairuo/p/7668410.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!