#include <iostream>
#include <Windows.h>
using namespace std;
bool AssociateFileType( const string & extension, // расширение файла
const string & section, // секция в реестре
const string & path, // путь к программе
const string & info ) // описание
{
HKEY hk;
DWORD dwDisp;
// [HKEY_CLASSES_ROOT\.wld]
// @="WLD-File"
if ( RegCreateKeyEx(HKEY_CLASSES_ROOT, extension.c_str(), 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &hk, &dwDisp) != ERROR_SUCCESS )
{
if ( RegOpenKeyEx(HKEY_CLASSES_ROOT, extension.c_str(), 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS )
return false;
}
if ( RegSetValueEx(hk, "", 0, REG_SZ,
(LPBYTE)section.c_str(), (DWORD)(section.length()+1)*sizeof(section[0])) != ERROR_SUCCESS )
{
return false;
}
RegCloseKey(hk);
// [HKEY_CLASSES_ROOT\WLD-File]
// @="TAU Engine World File"
if ( RegCreateKeyEx(HKEY_CLASSES_ROOT, section.c_str(), 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &hk, &dwDisp) != ERROR_SUCCESS )
{
if ( RegOpenKeyEx(HKEY_CLASSES_ROOT, section.c_str(), 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS )
return false;
}
if ( RegSetValueEx(hk, "", 0, REG_SZ,
(LPBYTE)info.c_str(), (DWORD)(info.length()+1)*sizeof(info[0])) != ERROR_SUCCESS )
{
return false;
}
RegCloseKey(hk);
// [HKEY_CLASSES_ROOT\WLD-File\shell]
// [HKEY_CLASSES_ROOT\WLD-File\shell\Open]
// [HKEY_CLASSES_ROOT\WLD-File\shell\Open\command]
// @="E:\\[development]\\Programs\\FreedomWorld\\TAU Crafter\\Crafter.exe \"%1\""
string s = section;
s += "\\shell\\Open\\command";
string mod_path = path;
mod_path += " \"%1\"";
if ( RegCreateKeyEx(HKEY_CLASSES_ROOT, s.c_str(), 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &hk, &dwDisp) != ERROR_SUCCESS )
{
if ( RegOpenKeyEx(HKEY_CLASSES_ROOT, s.c_str(), 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS )
return false;
}
if ( RegSetValueEx(hk, "", 0, REG_SZ,
(LPBYTE)mod_path.c_str(), (DWORD)( mod_path.length()+1)*sizeof(mod_path[0])) != ERROR_SUCCESS )
{
return false;
}
RegCloseKey(hk);
// [HKEY_CLASSES_ROOT\WLD-File\DefaultIcon]
// @="E:\\[development]\\Programs\\FreedomWorld\\TAU Crafter\\Crafter.exe,0"
s = section;
s += "\\DefaultIcon";
mod_path = path;
mod_path += ", 0";
if ( RegCreateKeyEx(HKEY_CLASSES_ROOT, s.c_str(), 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &hk, &dwDisp) != ERROR_SUCCESS )
{
if ( RegOpenKeyEx(HKEY_CLASSES_ROOT, s.c_str(), 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS )
return false;
}
if ( RegSetValueEx(hk, "", 0, REG_SZ,
(LPBYTE)mod_path.c_str(), (DWORD)(mod_path.length()+1)*sizeof(mod_path[0])) != ERROR_SUCCESS )
{
return false;
}
RegCloseKey(hk);
return true;
}
int main()
{
cout << AssociateFileType(".wld",
"WLD-File",
"E:\\[development]\\Programs\\FreedomWorld\\TAU Crafter\\Crafter.exe",
"TAU Engine World File")
<< endl;
system("PAUSE");
return 0;
}