(vc)注册文件关联

昨天工作中用到了文件关联,查阅了一些网上的资料,经过整理写下了下面的代码并验证通过,现记录下面,以备以后查阅。

/****************************************************
* 检测文件关联情况
* 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: 文件类型描述

****************************************************/

BOOL RegisterFileRelation(char *strExt, char *strAppName, char *strAppKey, char *strDefaultIcon, char *strDescribe)
{
CRegKey regkey;
char strTemp[_MAX_PATH];
HKEY hKey;

if (regkey.Create(HKEY_CLASSES_ROOT, strExt) != ERROR_SUCCESS)
{
return FALSE;
}
regkey.SetStringValue(NULL, strAppKey);

regkey.Create(HKEY_CLASSES_ROOT, strAppKey);
regkey.SetStringValue(NULL, strDescribe);

sprintf(strTemp,"%s\\DefaultIcon",strAppKey);
regkey.Create(HKEY_CLASSES_ROOT, strTemp);
regkey.SetStringValue(NULL, strDefaultIcon);

sprintf(strTemp,"%s\\Shell",strAppKey);
regkey.Create(HKEY_CLASSES_ROOT, strTemp);
regkey.SetStringValue(NULL, "Open");

sprintf(strTemp,"%s\\Shell\\Open\\Command",strAppKey);
regkey.Create(HKEY_CLASSES_ROOT, strTemp);

sprintf(strTemp,"\"%s\" %%1\"",strAppName);
regkey.SetStringValue(NULL, strTemp);
regkey.Close();

// 通知系统,文件关联改变了
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST,NULL,NULL);

}

转载于:https://www.cnblogs.com/sheizhuchenfu/p/4156790.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值