操作注册表进行文件类型与程序关联

#include <windows.h> 
#include <stdio.h> 
 
//------------------------------------------------
// 检测文件关联情况 
// 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); 
}  
http://www.rosoo.net/a/201110/15151.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值