//ассоциация расширения файла с приложением
bool ExtentionAssociation(bool bCreate1_or_delete0,const char* pEXT,const char* pAppDocumentName,const char* pModulePath)
{
if(!pEXT || !*pEXT)return false;
if(!pAppDocumentName || !*pAppDocumentName)return false;
if(!pModulePath || !*pModulePath)return false;
//первый ключ
//HKEY_CLASSES_ROOT\\.ext\\
//установить значение строки "default" данного ключа в "internal name" для типа файла - например
//HKEY_CLASSES_ROOT\\.ext\\ Default = "MyApp.Document"
//второй ключ
//HKEY_CLASSES_ROOT\\MyApp.Document\\
//Создайть подключ ....\\command.
//Значение default в ключе command - это расположение и имя приложения,
//заканчивающегося на "%1", которое представляет параметр, в котором приложению
//будет передаваться имя файла данных:
//HKEY_CLASSES_ROOT\\MyApp.Document\\shell\\open\\command\\ Default = "C:\\myapp\\myapp.exe %1"
HKEY k=0;
DWORD dwdRes=0;
std::string sEXT=".";
sEXT+=pEXT;
std::string sRanParam=pAppDocumentName;
sRanParam+="\\shell\\open\\command";
std::string sRanValue=pModulePath;
sRanValue+=" %1";
if(bCreate1_or_delete0)
{
//первый ключ
//HKEY_CLASSES_ROOT\\.ext\\default = "pAppDocumentName"
dwdRes=RegCreateKeyEx(HKEY_CLASSES_ROOT,sEXT.c_str(),0,0,0,KEY_ALL_ACCESS,0,&k,0);
if(dwdRes==ERROR_SUCCESS)
{
RegSetValueEx(k,/*"default"*/0,0,REG_SZ,(BYTE*)pAppDocumentName,strlen(pAppDocumentName));
RegCloseKey(k);k=0;
}
//второй ключ
//HKEY_CLASSES_ROOT\\"pAppDocumentName"\\shell\\open\\command\\default = "pModulePath"+" %1"
dwdRes=RegCreateKeyEx(HKEY_CLASSES_ROOT,sRanParam.c_str(),0,0,0,KEY_ALL_ACCESS,0,&k,0);
if(dwdRes==ERROR_SUCCESS)
{
RegSetValueEx(k,/*"default"*/0,0,REG_SZ,(BYTE*)sRanValue.c_str(),sRanValue.size());
RegCloseKey(k);k=0;
}
}
else
{
//первый ключ
//HKEY_CLASSES_ROOT\\.ext\\default = "pAppDocumentName"
dwdRes=RegOpenKeyEx(HKEY_CLASSES_ROOT,sEXT.c_str(),0,KEY_ALL_ACCESS,&k);
if(dwdRes==ERROR_SUCCESS)
{
SHDeleteKey(k,0);//RegDeleteTree(k,0);
RegCloseKey(k);k=0;
}
//второй ключ
//HKEY_CLASSES_ROOT\\"pAppDocumentName"\\shell\\open\\command\\default = "pModulePath"+" %1"
dwdRes=RegOpenKeyEx(HKEY_CLASSES_ROOT,sRanParam.c_str(),0,KEY_ALL_ACCESS,&k);
if(dwdRes==ERROR_SUCCESS)
{
SHDeleteKey(k,0);//RegDeleteTree(k,0);
RegCloseKey(k);k=0;
}
}
return true;
}