спасибо вот результат мож кому пригодится:
bool SetMoniker()
{
CString url = _T("your protocol");
CString def = _T("URL:someproto");
TCHAR app_path[_MAX_PATH+1]=_T("\0");
GetModuleFileName(NULL,app_path,_MAX_PATH);
CString icon(app_path);
icon += _T(",0");
CString command(app_path);
command = _T("\"") + command + _T("\"");
command += _T(" \"%1\"");
HKEY key;
if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_CLASSES_ROOT,_T("someproto"),0,0,REG_OPTION_NON_VOLATILE,KEY_WRITE,0,&key,0))
{
RegSetValueEx(key,_T("URL Protocol"),0,REG_SZ,(BYTE*)url.GetString(),(DWORD)( url.GetLength()*sizeof (TCHAR)) );
RegSetValueEx(key,NULL,0,REG_SZ,(BYTE*)def.GetString(),(DWORD)( def.GetLength()*sizeof (TCHAR)) );
HKEY icon_key;
if( ERROR_SUCCESS == RegCreateKeyEx(key,_T("DefaultIcon"),0,0,REG_OPTION_NON_VOLATILE,KEY_WRITE,0,&icon_key,0))
{
RegSetValueEx(icon_key,NULL,0,REG_SZ,(BYTE*)icon.GetString(),(DWORD)( icon.GetLength()*sizeof (TCHAR)) );
RegCloseKey(icon_key);
}
HKEY com;
if( ERROR_SUCCESS == RegCreateKeyEx(key,_T("shell\\open\\command"),0,0,REG_OPTION_NON_VOLATILE,KEY_WRITE,0,&com,0))
{
RegSetValueEx(com,NULL,0,REG_SZ,(BYTE*)command.GetString(),(DWORD)( command.GetLength()*sizeof (TCHAR)));
RegCloseKey(com);
}
RegCloseKey(key);
return true;
}
return false;
}
ассоциаяция приложения с протоколом
если человек нажимает на ссылку вида:
<A HREF="someprotocol://somaddr"> или вводит адрес в окне браузера с таким протоколом то открывается мое приложение и получает ссылку в качестве параметра.
HKEY_CLASSES_ROOT\someprotocol - объявление такого протокола
В HKEY_CLASSES_ROOT\someprotocol добавляешь строковое значение с именем URL Protocol. Пустое. Объявляет, что это URL твоего протокола.
Там же в дефолтном параметре (с пустым именем) можно написать скажем URL:My someprotocol
Далее для запуска:
Создаешь ключ:
HKEY_CLASSES_ROOT\someprotocol\shell\open\command
И добавляешь в дефолтный параметр (опять тот что с пустым именем) чтонибудь типа X:\applicationdiretory\YourApplication.exe %1
Запустит твое приложение X:\applicationdiretory\YourApplication.exe и передаст ему ссылу перывм параметром командной строки.
Иконку:
HKEY_CLASSES_ROOT\someprotocol\DefaultIcon
В дефолтном параметре путь до иконки или приложения с иконкой.