• 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:MyAppMyApp.exe")
    // strAppKey: ExeName扩展名在注册表中的键值(例如: "txtfile")
    // strDefaultIcon: 扩展名为strAppName的图标文件(例如: "C:MyAppMyApp.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);
            }
  • 相关阅读:
    windows下mysql多实例安装
    linux下mysql多实例安装
    redisAPI整理
    Flink
    Google Dremel架构
    Apache Kylin
    Phoenix概述
    SQL on Hadoop技术综述
    AES对称加密算法
    Hawq架构
  • 原文地址:https://www.cnblogs.com/nalanhairuo/p/7668410.html
Copyright © 2020-2023  润新知