Когда вы создали ассоциацию файлов, вы указали командную строку, которую Explorer должен запустить для активации вашей программы. Оболочка также помещает имя файла документа в командную строку, поэтому в вашей программе проверьте аргументы командной строки. Как вы это сделаете, зависит от вашего языка и среды разработки. В Delphi используйте ParamCount
и ParamStr
.
Когда вы создаете ассоциацию файлов, вы можете указать, где именно в командной строке должно находиться имя файла документа. Используйте %1
где-нибудь в командной строке, и оболочка заменит его именем файла. Поскольку имена файлов Windows часто содержат пробелы, имя файла следует заключать в кавычки, чтобы командная строка в ассоциации файлов выглядела так:
ArthurApp.exe "%1"
С этой ассоциацией двойной щелчок по другому файлу документа запустит другой экземпляр вашей программы. Если вы предпочитаете, чтобы документ открывался в другом окне уже запущенного экземпляра, вы можете написать код, чтобы ваша программа искала уже запущенные экземпляры при запуске. Если он его находит, он может связаться с этим экземпляром, чтобы сообщить ему, какой файл открывать. Вы можете осуществлять эту связь любым количеством способов, включая почтовые ящики, сокеты, именованные каналы, отображаемые в память файлы и DDE.
Механизм ассоциации файлов оболочки уже имеет способ связи через DDE, поэтому второй экземпляр вашей программы вообще не будет запущен. Вместо этого оболочка начнет диалог DDE с уже запущенным экземпляром и таким образом сообщит ему новое имя файла. Однако в настоящее время DDE, похоже, теряет популярность, поэтому сначала ознакомьтесь с некоторыми другими вариантами.
Что касается вашего дополнительного вопроса, нет, расширения не всегда состоят из трех символов. Оглянитесь вокруг, и это должно быть очевидно: код C помещается в файлы .c, графика Adobe Illustrator помещается в файлы .ai, а новые документы Microsoft Word помещаются в файлы . файлы .docx.
Но будьте осторожны. Если вы запросите **.doc*, результаты также будут включать файлы .docx. Это связано с тем, что FindFirstFile
соответствует как коротким, так и длинным именам файлов, а длинные имена файлов с длинными расширениями имеют трехсимвольные расширения в версиях с короткими именами файлов.
person
Rob Kennedy
schedule
19.01.2009