Как ОС узнает, что делать с файлом, если выбрана опция «Открыть с помощью ...»? - PullRequest
0 голосов
/ 16 июня 2009

Пояснение: Я не помню о Linux и не знаю о OS X, но в Windows вы можете щелкнуть правой кнопкой мыши файл и выбрать программу, чтобы открыть его. Но как ОС точно знает, как заставить программу открывать ее? Отслеживает ли диалоговое окно «Открыть файл» программа? Должен ли разработчик указывать специальный обработчик событий или что-то для этих случаев?

Ответы [ 6 ]

3 голосов
/ 16 июня 2009

Для Windows ответ есть в реестре. Если вам удобно читать реестр, запустите regedit.exe на вашем компьютере с Windows.

В разделе HKEY_CLASSES_ROOT вы увидите список ключей всех типов файлов, .doc, .txt и т. Д. Каждый из этих ключей содержит ключ с именем "OpenWithList" или "OpenWithProgIds". Приложение может иметь зарегистрированный «ProgId», также найденный в HKEY_CLASSES_ROOT, и он может зарегистрировать свой ProgId для типов файлов, которые он хочет обрабатывать в OpenWithProgIds. В противном случае он регистрируется в OpenWithList.

В ответ на комментарий к первому ответу (потому что мне не хватает представителя, чтобы комментировать):

Вы думаете о DDE, которая является почти устаревшей технологией. Оболочка Windows выполняет приложение с выбранным файлом в качестве первого параметра.

1 голос
/ 16 июня 2009

Проводник Windows запоминает ваши предыдущие варианты «Открыть с помощью ...» на основе расширения файла в следующем ключе:

HKCR\.ext\OpenWithList

В следующий раз, когда вы щелкнете правой кнопкой мыши по файлу, он найдет его и создаст список программ, которые вы ранее использовали для открытия файла определенного типа.

Скажем, он находит ключ с именем "myapp.exe". Затем он ищет приложение здесь:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\myapp.exe

извлекает информацию о том, где установлено приложение. И это идет здесь:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\myapp.exe

следует за GUID, сохраненным там, чтобы узнать отображаемое имя приложения.

Чтобы добавить к веселью, основное связанное приложение также находится в списке, также все в ключе OpenWithProgIds и все в:

HKEY_CLASSES_ROOT\*\OpenWithList

, а также соответствующие им HKEY_CURRENT_USER аналоги.

Полученный список приложений затем становится уникальным, сортируется и отображается. При выборе файл запускается так же, как и любой другой файл, на который вы щелкаете - т.е.

C:\path\to\myapp.exe "C:\path\to\the\file.ext"
0 голосов
/ 16 июня 2009

Операционная система запускает указанную программу, отправляя в качестве параметра путь к файлу, который нужно открыть.

Например, в C #, если вы хотите знать, какой файл хочет открыть операционная система, вам нужно будет сделать:

class Program
{
    static void Main(string[] args)
    {
        if (args.Length == 1) //The OS wants me to open a file
            openSomeFileJustBecauseTheOSWantsIt(args[0]);
    }
}
0 голосов
/ 16 июня 2009

Просто для некоторой ностальгии у довольно блестящего Acorn archimedes была намного лучшая система с каждым типом файла, имеющим уникальный номер типа, с кодом производителя и приложения (скорее как MAC-адрес), который был написан с файл.
Это означает, что у вас могут быть разные файлы, называемые .bak, открытые правильным приложением - в отличие от случая Windows, когда новое установленное приложение крадет право собственности на каждый выходящий файл этого типа. Autocad особенно плох для этого, регистрируя около 20 типов файлов.

0 голосов
/ 16 июня 2009

Ассоциации файлов хранятся в реестре в: HKEY_CLASSES_ROOT.

Вы можете управлять ими графически с помощью проводника Windows: (WinXP)

Нажмите Инструменты / Параметры / Типы файлов

Или с помощью апплета «Программы по умолчанию» на панели управления. (Vista)

0 голосов
/ 16 июня 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...