Вот и мы столкнулись в команде нашей с этой казалось бы простой проблемой. Пишем проги, а ассоциировать файлы не можем. Простая ассоциация через инсталлятор (wise, installshield, vise и другие) осуществляется без проблем: щёлкнул мышкой и написал параметры скрипта и всё ассоциировал. Но ведь это полбеды! Подобная ассоциация обеспечит Вам только открытие приложения, с которым было выполнено данное действо. А хотелось, чтобы два раза щёлкнул по документу, созданного в своей проге и запустилось приложение с ЗАГРУЖЕННЫМ файлом - т.е. открылся файл данных. Многие программисты скажут - это просто, что там делать-то, раз плюнуть, а некоторые говорят - "А оно Мне надо". Проблемы может и нет, а в документациях мы ничего не нашли толкового, только обрывки истины и всё... Ну, ладно, это всё была прелюдия, а теперь будет сама опера. Задачу эту мы решили в течение 3-х часов без учёта того, что читали различную документацию целый год! Смешно, но зато сами дошли до всего и можем теперь с гордостью сказать, что мы знаем прекрасно эту сторону вопроса. Итак...
Мы программируем на delphi, но думаем, что в остальных средах разработки всё тоже самое. В delphi есть такой класс tregistry описывать который мы не будем, почитайте хэлп и всё. У модуля windows есть функция getlinecommand, которая отвечает за состояние специального регистра памяти, в который (при запуске ассоциированного документа или самого приложения) записывается командная строка - точнее полный путь к месту приложения или документа. Разъяснять на пальцах более не будем, а перейдём конкретно к примеру:
Листинг 1. Работа с классом tregistry в delphi
{Прописка реестра}
var reg: tregistry;
………………….
1 begin
2 reg:=tregistry.create; {создаём переменную класса}
3 reg.rootkey:=hkey_classes_root; {определяем имя активного раздела}
4 reg.createkey('.cid'); {определяем расширение файла, созданного из-под нашего приложения}
5 reg.openkey('.cid',true); {Открываем ключ с расширением и редактируем}
6 reg.writestring('','cool.document'); {прописываем строку значения}
7 reg.closekey; {закрываем активный ключ}
8 reg.createkey('cool.documentshellopencommand');{создаём новый ключ}
9 reg.openkey('cool.documentshellopencommand',true);
10 reg.writestring(' ',inputstring+'myapp.exe "%1"'); {прописываем путь к приложению с параметром %1, о котором скажем позже}
11 reg.closekey; {закрываем ключ}
12 reg.createkey('cool.documentdefaulticon'); {создаём новый ключ}
13 reg.openkey('cool.documentdefaulticon',true); {разрешаем редактирование и открываем его}
14 reg.writestring(' ',inputstring+'icon.ico,0'); {прописываем путь к иконке нашего регистрируемого документа}
15 reg.closekey; {закрываем ключ}
16 end;
В 10-ой строке есть параметр %1, который означает что при реализации метода getlinecommand вместе с путём к приложению будет в кавычках отражаться полный путь к документу, на котором щёлкнули. В строке 14 можно прописать параметр reg.writestring(' ',inputstring+'myapp.exe,1'). Тогда не нужна никакая иконка отдельно созданная, а ассоциированная иконка будет иметь вид загнутого листика с уменьшенной по средине него иконкой Вашего exe-файла. Вот реестр мы настроили, а как быть с обработкой строки, полученной после реализации метода getlinecommand? Мы решили эту проблему абсолютно несложным кодом, состоящего из готовеньких функций работы со строками!
Листинг 2. Обработка командной строки, полученной с помощью метода getlinecommand (модуль windows)
s:=ansistrscan(windows.getcommandline,'"'); {перевод указателя на заданный символ в командной строке, а именно "}
ss:=ansiextractquotedstr(s,'"'); {избавляемся от кавычек в командной строке и получаем "чистый" путь к файлу данных}
load этот файл как угодно… и всё!
Данный метод реализовать нужно либо на событие create, show или на что-то родственное, что обрабатывается первым
Главная » Ассоциирование файлов: работа с реестром, описание технологии..
Многие пытались, а может и не пытались ассоциировать файлы, чтобы собственная программа не просто создавала файлы с непонятным ярлыком, а чтобы там отображался фрагмент ярлыка создателя программы, или ещё лучше, отдельно созданный ярлык... Впрочем задача перед программистом стояла сделать эту ассоциацию по всем законам как положено (как у word, excel да впрочем всех известных фирм-производителей программного обеспечения (ПО)).
Категория: Языки программирования | Просмотров: 218 Скачать софт бесплатно