Python 3. Ассоциирование расширений файлов со своей программой.
Запись от Фаер размещена 15.01.2015 в 22:31
Показов 2005
Комментарии 0
Метки cmd, python, ассоциация, расширение, реестр
Всем здорово! ![]() На досуге занимался редактированием реестра с помощью Python 3 и возжелал кое-какими наработками поделиться. Ну, знаете, не всеми, потому что Короче, к делу. Допустим, данность такова: Моё приложение представляет собой среду разработки Лунатик и позволяет редактировать .html файлы. Запустить программу и использовать её интерфейс, чтобы открыть один из таких файлов - это, конечно, вариант рабочий, но не самый изящный. Может, кто-то хочет зайти в каталог, дважды кликнуть по HTML-файлу и тем самым запустить среду, одновременно открыв в ней выбранный файл. Как это организовать!? Предварительный въезд: Наверняка, Вам известно, что такое реестр Windows. Это структурированная база данных, в которой уважающие себя приложения(и не только они) хранят свои данные, обычно, те, что нужно держать подальше от алчных или просто криворуких пользователей. Оказывается, в реестре также хранится информация о том, какие файлы какими программами нужно открывать. Эти данные можно настроить под себя, например, с помощью Редактора Реестра из Панели Управления. Однако Мы пишем приложение не для себя, а для тех, от кого само существование реестра следует держать в тайне. Следовательно, Нам нужно затолкать в свою программу несколько команд, которые будут незаметно производить необходимые изменения. Практика: Для того, чтобы изменить параметры реестра, Нам понадобится cmd. Обращаться к ней Мы будем с помощью функции call() модуля subprocess. Нужно учитывать, что команды, транслируемые в cmd, будут возвращать результаты выполнения в ту же cmd - а Нам необходимо иметь доступ к этим данным, поэтому Мы потанцуем с бубном и перенаправим stdout и stderr командной строки в текстовый файл. Для начала давайте попробуем получить список параметров из реестра, чтобы понять, нужно ли вообще что-либо изменять:
Команда reg query выдаёт список параметров, сохранённых под некоторым ключом. В Нашем случае, ключ(каталог, если так понятнее) называется HKEY_CLASSES_ROOT. Запустив команду, Мы направляем её поток вывода и поток ошибок в файл out.txt. Будем считать, что Наше приложение называется Proga. Проверим наличие такого каталога в реестре(может его и создавать не требуется) по списку, сохранённому в файле out.txt, и создадим запись, указывающую на главный исполняемый файл Нашей программы:
После того, как выполните эту часть скрипта, откройте редактор реестра и найдите созданную запись. Выглядеть она должна точно так, как показано на скриншоте. Значок %1 - это адрес файла, на который пользователь кликнул дважды(или ПКМ), так что не вздумайте пропустить его! Колдовство ещё не окончено. Дело в том, что сейчас Мы только зарегистрировали(если можно так сказать) приложение в системе, а вот сами ассоциации пока остались без изменений. Пишем следующую команду:
Собственно, это всё. Теперь Вы можете смело нажать ПКМ на любом HTML-файле(или какой Вы там писали) и увидеть свою программу в списке "Открыть с помощью". Там же можно поставить галочку на "Использовать для всех файлов этого типа", чтобы решать всё двойным щелчком. Разумеется, есть вариант сделать это программно, но такая практика не соответствует правилами этикета, так что на этом Мы остановимся. Если Вы что-то понимаете в программировании, то уже смекнули, что после нажатия "Открыть с помощью" будет запущена Ваша программа, вот только выбранный файл в ней не откроется. Вот здесь Нам и понадобится тот самый символ %1, который Мы прописали в реестре. Как Вы помните, он передавал в программу адрес выбранного файла. Узнать этот адрес уже внутри приложения можно с помощью системных аргументов:
Так же должен обратить Ваше внимание на пару важных моментов: Во-первых, записи в реестре, как и ассоциации по расширениям, появятся только после первого запуска Вашей программы. Исправить сие недоразумение крайне трудно, но возможно. Рекомендую порыться в dist-утилитах компилятора cx_Freeze. Во-вторых, ассоциировать файловые расширения можно только с исполняемыми EXE-файлами(поправьте, если не так). Записывая в shell\open\command, например, адрес к Python-скрипту, Вы не сможете прописать ассоциации, и, даже если они появятся в списке "Открыть с помощью", при запуске Вы будете получать ошибку, вроде "Такой-то файл не является приложением Win32". На этом, собственно, всё. Не забывайте ставить оценки за запись. А ещё читайте и бахайте лайки моей новой книге.
| ||||||||||||||||||||
Метки cmd, python, ассоциация, расширение, реестр
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии



