![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реестр [D7, XP]
vain © (2006-08-13 23:09:00)Объясните мне, пожалуйста, как происходит открытие файла, сассоциированного с каким-л. приложением?
Насколько я понимаю это происходит так:
1. В HKСR\ ищется расширение открываемого файла (н-р. .ext).
2. В HKCR\.ext смотрится значение default (н-р. somefile).
3. Из HKCR\somefile\shell\open\command\default берётся образец командной строки...
Ничего не напутал?
Вот тут начинаются вопросы...
I. По каким правилам строится этот образец командной строки?
II. Почему если я меняю значение параметра HKCR\Winapm.file\shell\open\command\default с "C:\Program Files\Winamp\winamp.exe" "%1" на "C:\Program Files\Light Alloy\LA.exe" "%1", то всё равно запускается winamp?
vain (2006-08-14 14:30:00) [1]
> это для извещения винды, что ты поменял ассоциацию
...я уже начинаю понимать...
Но зачем её об этом извещать, если она при каждом запуске файла лезет в реестр? Или всё-таки не при каждом? И как Фленов мог про это забыть? Хотя его способ работает, чтобы установить ассоциацию, но не изменить.
vain (2006-08-14 14:30:00) [2]
> это для извещения винды, что ты поменял ассоциацию
...я уже начинаю понимать...
Но зачем её об этом извещать, если она при каждом запуске файла лезет в реестр? Или всё-таки не при каждом? И как Фленов мог про это забыть? Хотя его способ работает, чтобы установить ассоциацию, но не изменить.
clickmaker (2006-08-14 14:16:00) [3]
> Что это такое?
это для извещения винды, что ты поменял ассоциацию
vain (2006-08-14 14:08:00) [4]
> SHChangeNotify( SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
>
>
Что это такое?
clickmaker (2006-08-14 13:21:00) [5]SHChangeNotify( SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
vain (2006-08-14 12:59:00) [6]Текст из программы Фленова:
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey('.BMP' , True);
Reg.WriteString('', 'BMPfile');
Reg.CloseKey;
Reg.CreateKey('BMP'+'file_cyd');
Reg.OpenKey('BMPfile\DefaultIcon', True);
Reg.WriteString('', Application.ExeName + ',0');
Reg.CloseKey;
Reg.OpenKey('BMPfile\shell\open\command', True);
Reg.WriteString('', Application.ExeName + ' "%1"');
Reg.CloseKey;
Reg.Free;
vain (2006-08-14 12:57:00) [7]Подскажите, кто-нибудь что-нибудь - очень интересно!
vain (2006-08-14 12:56:00) [8]Короче, объясняю свою проблему подробно.
Ставлю FastStoneImageViewer (c IrfanView тоже самое), ассоциирую его с .jpg - jpg открывается с помощью FastStone. Потом пытаюсь сассоциировать jpg с собственным viewer'ом. Ничего не получается. При написании пользовался книгой «Delphi глазами ][акера» Михаила Фленова. Так вот даже его прога из примеров для бээмпэх не работает!
Причём в реестр всё прописывается. Никаких Reg Protector'ов у меня не стоит.
Вывод: значит FastStone и IrfanView прописывают инфу о ассоциировании ещё где-то, а где?.. А если даже удалить ключ HKCR\.jpg, то джипеги всё равно открываются с помощью FastSton'a. Вот такая проблема.
PSPF2003 (2006-08-14 11:36:00) [9]II не пойму вопроса
PSPF2003 (2006-08-14 11:34:00) [10]
> А на II ответить сможешь?
> Какое же это описание, если там ничего не описывается?
Смотри открываем Редактор реестра переходим например на .txt
В поле Content Type идет описание
vain (2006-08-14 11:30:00) [11]Странно это всё...
Какое же это описание, если там ничего не описывается?
А на II ответить сможешь?
PSPF2003 (2006-08-14 11:10:00) [12]Комп перегружать нет необходимости.
file_cyd это я насколько понял краткое описание, NFO это файлы с расширением *.NFO
Вин КАЖДЫЙ раз лезет в реестр
vain (2006-08-14 11:05:00) [13]Что такое ключ <расширение файла>+'file_cyd'? И почему он создается и туда ничего не записывается?
Это что, оказывается при запуске файла виндовз не каждый раз лазит в реестр, а хранит эти данные ещё где-то? Это я к тому что комп перезагружать надо?
PSPF2003 (2006-08-14 09:22:00) [14]Я давно программку писал, задавал ассоциацию с файлом, вот гляди разбирайся.
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey('.NFO' , True);
Reg.WriteString('', 'MSInfo.Document');
Reg.CloseKey;
Reg.CreateKey('NFO'+'file_cyd');
Reg.OpenKey('MSInfo.Document\DefaultIcon', True);
Reg.WriteString('', Application.ExeName + ',0');
Reg.CloseKey;
Reg.OpenKey('MSInfo.Document\shell\open\command', True);
Reg.WriteString('', Application.ExeName + ' "%1"');
Reg.CloseKey;
Reg.Free;
MessageBox(Application.Handle, 'Для вступления изменений в силу перезагрузите комп !', 'Внимание', 0)