BOOL CMiOSUtil::CheckFileAssociation(LPCTSTR lpExt, LPTSTR lpValue, DWORD *pnChars)
{
LONG lRet = ERROR_SUCCESS;
CRegKey oRegKey;
lRet = oRegKey.Open(HKEY_CLASSES_ROOT, lpExt, KEY_QUERY_VALUE);
if(lRet == ERROR_SUCCESS)
lRet = oRegKey.QueryStringValue( _T(""), lpValue, pnChars);
return lRet == ERROR_SUCCESS;
}
BOOL CMiOSUtil::CreateFileAssociation(LPCTSTR lpExt, LPCTSTR lpName, LPCTSTR lpIconPath, LPCTSTR lpCommandLine)
{
LONG lRet = ERROR_SUCCESS;
CRegKey oRegKey;
lRet = oRegKey.Open(HKEY_CLASSES_ROOT, lpExt, KEY_SET_VALUE);
if(lRet == ERROR_FILE_NOT_FOUND)
lRet = oRegKey.Create(HKEY_CLASSES_ROOT, lpExt);
if(lRet == ERROR_SUCCESS)
lRet = oRegKey.SetStringValue(_T(""), lpName);
if(lRet == ERROR_SUCCESS)
lRet = oRegKey.Create(HKEY_CLASSES_ROOT, lpName, NULL);
CRegKey oRegKeySub;
if(lpIconPath != NULL)
{
if(lRet == ERROR_SUCCESS)
lRet = oRegKeySub.Create(oRegKey, _T("DefaultIcon"));
if(lRet == ERROR_SUCCESS)
lRet = oRegKeySub.SetStringValue(_T(""), lpIconPath);
}
if(lRet == ERROR_SUCCESS)
lRet = oRegKeySub.Create(oRegKey, _T("Shell\\Open\\Command"));
if(lRet == ERROR_SUCCESS)
lRet = oRegKeySub.SetStringValue(_T(""), lpCommandLine);
return lRet == ERROR_SUCCESS;
}
BOOL CMiOSUtil::DestroyFileAssociation(LPCTSTR lpExt)
{
TCHAR szFileAssociationValue[MAX_PATH] = {0};
DWORD dwFileAssociationValue = MI_DIMOF(szFileAssociationValue);
if(!CheckFileAssociation(lpExt, szFileAssociationValue, &dwFileAssociationValue))
return FALSE;
CRegKey oRegKey;
LONG lRet = oRegKey.Open(HKEY_CLASSES_ROOT, NULL, KEY_SET_VALUE);
if(lRet == ERROR_SUCCESS)
{
lRet = oRegKey.RecurseDeleteKey(lpExt);
lRet = oRegKey.RecurseDeleteKey(szFileAssociationValue);
}
return lRet == ERROR_SUCCESS;
}
刷新
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_FLUSHNOWAIT,0,0);
另外一处(优先级比较高)
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.apk
ProgID