Обработчики контекстного меню Windows могут быть как статическими, так и динамическими. Если вам интересно углубиться в это, я советую вам прочитать статью о контекстных меню и контекстных меню , особенно о выборе статического или динамического метода контекстного меню и настройке контекстного меню с использованием динамических глаголов.
Цитата из этого отрывка книги по программированию оболочки Visual Basic:
Динамические контекстные меню
Статические контекстные меню ограничены, потому что они одинаковы для каждого файлового объекта данного типа. Кроме того, количество файлов, которые могут быть обработаны через статическое меню, ограничено программой, которая используется для выполнения команды. Что делать, если вам нужно обработать 20 файлов? Что делать, если вам нужны разные параметры обработки в зависимости от состояния самого файла? Есть также ситуации, когда вам может понадобиться одно контекстное меню для группы файлов и другое для одного файла. Это где динамические контекстные меню вступают в игру.
...
Вы можете захотеть отображать разные пункты меню в зависимости от того, был ли выбран один или несколько файлов. Поскольку количество выбранных файлов может быть определено в IShellExtInit::Initialize, это становится тривиальным вопросом. У вас также есть возможность основывать пункт меню на самом файле. В дополнение к количеству выбранных файлов вы также уже знаете имена файлов. Это означает, что вы можете открыть файл, получить информацию и основать пункт меню на реальных данных. Или вы можете изучить какой-либо другой атрибут файла (например, дату его создания, его размер или статус «только для чтения») и основать пункт меню на этой информации.
Наконец, если вы хотите доказать, что файл действительно читается DLL расширения оболочки WinRAR (так как вы, похоже, сомневаетесь в этом), вот различные вызовы ReadFile, зарегистрированные Process Monitor при простом щелчке правой кнопкой мыши WinRAR SFX:
(Имя процесса отображается как explorer.exe, а не rarext.dll, потому что обработчик контекстного меню является «внутрипроцессным» COM-объектом, который оболочка загружает непосредственно в область памяти explorer.exe для выполнения.)
Как видите, он читает первые 7 байтов, чтобы подтвердить, что это EXE:
После прочтения дополнительных данных (без сомнения, для получения и анализа заголовка), он читает 7 байтов из смещения 101 376, чтобы подтвердить, что это WinRAR SFX, а не просто какой-либо старый EXE:
Это побуждает его добавлять различные пункты контекстного меню, такие как Open with WinRAR, Extract with WinRAR и т.д., Которые не добавляются для "обычных" EXE-файлов.
Кроме того, в диалоге настроек WinRAR есть опция « Где проверять SFX-архивы»:
Вот что говорит об этом файл справки:
Параметры «Где проверить SFX-архивы» управляют обработкой SFX-архивов в контекстных меню. Проверка содержимого исполняемого файла и определение, является ли он самораспаковывающимся (SFX) архивом, приводит к некоторой задержке при щелчке правой кнопкой мыши по каждому файлу «.exe», поскольку WinRAR необходимо прочитать и проанализировать данные файла, чтобы выяснить, является ли он SFX. Хотя такая задержка незначительна для быстрых локальных жестких дисков, она может быть заметна в случае медленных сетевых дисков. Эта группа опций позволяет включать или отключать обработку SFX для локальных жестких дисков, сетевых дисков и других дисков, таких как CD-ROM и USB, отдельно. Если вы отключите эти параметры, вы не увидите все элементы контекстного меню, связанные с SFX, при щелчке правой кнопкой мыши по архиву SFX. Поэтому отключайте эти параметры, только если вы действительно испытываете задержки при щелчке правой кнопкой мыши по файлам «.exe».
Надеюсь, что это заставит ваши сомнения отдохнуть. :) Что касается вашего второго вопроса о том, имеют ли расширения "меньшее значение" сейчас и не имеют «какого-либо влияния в контекстном меню [s]», я не понимаю, что вы имеете в виду. Даже миниатюры изображений / видео генерируются обработчиками расширения оболочки (DLL). Список различных обработчиков можно найти здесь. Как видите, можно иметь собственные обработчики расширений оболочки для всего: от контекстных меню, операций перетаскивания, значков, наложения значков, списков свойств, миниатюр, информационных подсказок, метаданных, столбцов Explorer, диалоговых окон копирования / перемещения / удаления / переименования. , поиск ...
Редактировать: По совпадению, Рэймонд Чен случайно опубликовал статью о расширениях оболочки и сегодня (не забудьте также прочитать предыдущую ).