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