Как Windows сообщает программе имя открываемого файла?

#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 (по умолчанию — в вашей системе это может отличаться)