Страница 1 из 1

Открывать файлы в моей программе по двойному клику

Добавлено: 06 мар 2005, 21:55
Хыиуду
Вопрос следующего плана:
Моя программа работает с файлами *.bu, ею созданными. Насколько я знаю, никакая программа больше не использует файлы такого расширения. Обычно, чтобы открыть файл, надо сделать Button1Click, тогда произойдет Opendialog1.Execute, файл откроется и информация из него считается. А как сделать так, чтобы если юзер в Эксплорере дважды кликнул на файле *.bu, тут же открылась моя программа и выполнились соответствующие действия? Как, например, дважды кликнешь по *.pdf - открывается Acrobat Reader.
Второе. Если файлы такого вида открываются не только моей программой (например, текстовым редактором), но и другими, можно ли как-нибудь встроить мою программу в меню "Открыть с помощью..." или в само контекстное меню файла?
Спасибо за внимание

Добавлено: 07 мар 2005, 14:22
Romeo
Нужно программно (при первом запуске, например) добавить соответствующую информацию в реестр по адресу: "Software\Microsoft\Windows\CurrentVersion\FileAssociation".

Добавлено: 07 мар 2005, 21:47
Хыиуду
Уважаемый Ромео, возможно, имелась в виду ветвь реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileAssociation?
И потом, какой должна быть "соответствующая информация"?
Я так посмотрел в реестре ассоциацию для txt-файла - там написано "C:\Windows\Notepad.exe %1". Вот как объяснить моей программе, что %1 - это когда после Button1Click произошло выполнение Opendialog1?

Добавлено: 07 мар 2005, 23:04
DemoNisv
Это в советах от Кулибы (может быть и прокатит, больно уж старый совет) :
В основном вам необходимо добавить два ключа в улей регистра HKEY_CLASSES_ROOT. Зарегистрируете в корне ваше расширение типа ".ext" (создаете ключ с именем расширения):
--------------------------------------------------------------------------------
HKEY_CLASSES_ROOT\

.ext\

и запишите в строке "default" созданного ключа "внутреннее имя" вашего типа файлов - например, MyApp.Document:
--------------------------------------------------------------------------------
HKEY_CLASSES_ROOT\

.ext\
Default = "MyApp.Document"

Затем создайте другой ключ с этим именем:
--------------------------------------------------------------------------------
HKEY_CLASSES_ROOT\
MyApp.Document\

Создайте подключ с именем "shell", в нем другой подключ с именем "open" и в "open", в свою очередь, еще один подключ с именем "command". Значение по умолчанию (default) - путь и имя вашего приложению с ключом "%1", представляющим параметр "имя файла", позволяя системе подставлять подставлять вызванный файл:
--------------------------------------------------------------------------------
HKEY_CLASSES_ROOT\

MyApp.Document\
shell\
open\
command\
Default = "C:\myapp\myapp.exe %1"

Все манипуляции в коде производятся с помощью объекта TRegistry или при использовании InstallShield, который сделает это за вас автоматически. Я должен посоветовать вам использовать оба пути, поскольку пользователь может внести в регистры всякий мусор.

Добавлено: 09 мар 2005, 11:21
Игорь Акопян
Хыиуду писал(а):Вот как объяснить моей программе, что %1 - это когда после Button1Click произошло выполнение Opendialog1?
При старте своей программы проверять ParamCount, и вообще глянуть хелп на ParamCount и ParamStr

Добавлено: 09 мар 2005, 20:03
Naeel Maqsudov
"%1" еще не забывайте в двойные кавычки заключать, иначе, если строка пути к файлу содержит пробелы, то получится лажа: Paramstr вернет путь по частям.