#windows #cmd
Вопрос:
Например, когда мы открываем файл .mp4, Windows вызывает видеоплеер по умолчанию в системе, тогда как видеоплеер узнает, какой файл запускать после открытия?
Я предполагаю, что должен быть способ, с помощью которого Windows передает имя и путь к открытому файлу приложению, открывающему его.
Я часами искал в Интернете, но, похоже, не могу найти точного ответа. В некоторых ответах смутно предполагалось, что Windows использует некоторые аргументы командной строки для запуска файлов, отличных от exe, которые могут читать приложения (например, видеоплеер). Но все равно они не упоминают, в какой командной строке.
Если для того, чтобы я понял ответ, требуется какой-либо язык программирования, имейте в виду, что я хорошо владею языком python и немного знаю C.
Почему мне пришел в голову этот вопрос-я создаю настольное приложение, которое может открывать созданный мной пользовательский тип файла. Я могу легко открыть эти файлы изнутри программы, но они не открываются одинаково при двойном щелчке по файлу. Windows вызывает мое приложение, когда я открываю тип файла (я связал расширение файла с моим приложением), но мое приложение не может узнать, какой файл был дважды щелкнут.
Комментарии:
1. Обычно имя файла передается исполняемому файлу как
argv[1]
подобноеC:program filesplayer.exe C:file.mp4
. Вы можете увидеть точную командную строку, выданную системой, на вкладке «Процесс» диспетчера задач. (Возможно, вам потребуется выбрать соответствующее поле в меню «Вид».)2. Итак, проверки
sys.argv[1]
наличия будет достаточно, или мне следует проверить, заканчивается лиsys.argv[1]
мое расширение или нет?3. Вы можете делать любые проверки, какие захотите. Даже соответствующее расширение может не соответствовать вашему желаемому формату. Расширения предназначены только для людей.
4. Загляните в реестр по адресу
HKEY_CLASSES_ROOTApplicationsnotepad.exeshellopencommand
. эта команда будет использоваться для открытияNOTEPAD.EXE
целевого файла.5. Смотрите две команды
assoc /?
иftype /?
. Первый присваивает «тип» определенному расширению, второй «переводит» этот тип в командную строку. Напримерassoc .txt
, сопоставляет тип «txtfile» с.txt
расширениями иftype txtfile
привязывает его к notepad.exe (по умолчанию — в вашей системе это может отличаться)