使用方法,如要註冊".abc"類型的文件:
RegisterShellFileType(".abc", "abcfile", "abc文件", "c:/abc/abc.exe", NULL, "c:/abc/abc.exe", 0);
void RegisterShellFileType(
string ext_name, string type_name, string description,
string exec, string args, string icon_file, int icon_index)
{
HKEY hKey;
char szIndex[32] = {0};
RegCreateKey(HKEY_CLASSES_ROOT, ext_name.c_str(), &hKey);
RegSetValue(hKey, "", REG_SZ, type_name.c_str(), type_name.length());
RegCloseKey(hKey);
RegCreateKey(HKEY_CLASSES_ROOT, type_name.c_str(), &hKey);
RegSetValue(hKey, "", REG_SZ, description.c_str(), description.length());
RegCloseKey(hKey);
RegCreateKey(HKEY_CLASSES_ROOT, (type_name+"//DefaultIcon").c_str(), &hKey);
itoa(icon_index, szIndex, 10);
icon_file = icon_file + "," + szIndex;
RegSetValue(hKey, "", REG_SZ, icon_file.c_str(), icon_file.length());
RegCloseKey(hKey);
RegCreateKey(HKEY_CLASSES_ROOT, (type_name+"//Shell//Open//Command").c_str(), &hKey);
exec = exec + " " + args + " /"%1/"";
RegSetValue(hKey, "", REG_SZ, exec.c_str(), exec.length());
RegCloseKey(hKey);
//刷新系統圖標緩存
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_DWORD, NULL, 0);
}