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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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

Нужно программно (при первом запуске, например) добавить соответствующую информацию в реестр по адресу: "Software\Microsoft\Windows\CurrentVersion\FileAssociation".
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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

Это в советах от Кулибы (может быть и прокатит, больно уж старый совет) :
В основном вам необходимо добавить два ключа в улей регистра 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, который сделает это за вас автоматически. Я должен посоветовать вам использовать оба пути, поскольку пользователь может внести в регистры всякий мусор.
бросай курить , вставай на лыжи и вместо рака будет грыжа...
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

Хыиуду писал(а):Вот как объяснить моей программе, что %1 - это когда после Button1Click произошло выполнение Opendialog1?
При старте своей программы проверять ParamCount, и вообще глянуть хелп на ParamCount и ParamStr
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

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