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

// 检测文件关联情况
// 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);
        }

 

转载于:https://www.cnblogs.com/nalanhairuo/p/7668410.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值