16,471
社区成员
发帖
与我相关
我的任务
分享
void RegisterFileRelation(char *strExt/*要关联的文件后缀,上面写错了*/, char *strAppName, char *strAppKey, char *strDefaultIcon, char *strDescribe)
//---------------------------------------------------------------------------
// 检测文件关联情况
// strExt: 要检测的扩展名(例如: ".txt_aes")
// 返回TRUE: 表示已关联,FALSE: 表示未关联
BOOL CheckFileRelation(const char *strExt)
{
HKEY hExtKey;
char AppKey[_MAX_PATH];
DWORD dwSize=sizeof(AppKey);
if(RegOpenKey(HKEY_CLASSES_ROOT,strExt,&hExtKey)==ERROR_SUCCESS)
{//若打开成功,说明已经关联
RegQueryValueEx(hExtKey,NULL,NULL,NULL,(LPBYTE)AppKey,&dwSize);
RegCloseKey(hExtKey);
//检查注册表项值,如符合返回TRUE
if (strcmp(AppKey,strExt+1)==0)
{
return TRUE;
}
//不符合返回FALSE
return FALSE;
}
return FALSE;
}
//---------------------------------------------------------------------------
// 注册文件关联
// 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,_T(""),REG_SZ,strAppKey,(DWORD)(strlen(strAppKey)+1));
RegCloseKey(hKey);
RegCreateKey(HKEY_CLASSES_ROOT,strAppKey,&hKey);
RegSetValue(hKey,"",REG_SZ,strDescribe,(DWORD)(strlen(strDescribe)+1));
RegCloseKey(hKey);
sprintf(strTemp,"%s\\DefaultIcon",strAppKey);
RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);
RegSetValue(hKey,"",REG_SZ,strDefaultIcon,(DWORD)(strlen(strDefaultIcon)+1));
RegCloseKey(hKey);
sprintf(strTemp,"%s\\Shell",strAppKey);
RegCreateKey(HKEY_CLASSES_ROOT,strTemp,&hKey);
RegSetValue(hKey,"",REG_SZ,"Open",(DWORD)(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,(DWORD)(strlen(strTemp)+1));
RegCloseKey(hKey);
SHChangeNotify(0x8000000, 0, 0, 0);
}