Решена Вопросы к статье "Файловые ассоциации: знакомимся на практике"

Тема в разделе "Реестр Microsoft Windows", создана пользователем Dragokas, 2 янв 2014.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.309
    http://safezone.cc/threads/fajlovye-associacii-znakomimsja-na-praktike.21990/

    Я думаю статью нельзя считать завершенной из-за пары неоднозначностей.

    Вот начало 2-го поста об "Открыть с помощью..."
    Ключевой вопрос - почему? Что имел в виду автор?

    А я такой вот придирчивый. И мне все же интересно, какие будут последствия.
    Иначе - хотелось бы ссылочку для тех, кто желает подробностей (если оно того стоит).

    Теперь предпоследний скрин:
    1. Меня эта галочка насторожила "Использовать выбранную программу для всех файлов такого типа..."

    меню открыть с помощью+блокнот.png

    В статье не сказано, что если ее оставить, то изменится параметр реестра HKCR\{ ProgID }\Shell\Open\Command (так ведь?) - это очевидно, но стоит уточнить и сделать как вывод ко 2-й части статьи.
    А также тот факт, что тогда порядок предпочтения MRUList изменится.
    2. У тебя на скрине галочка неактивна. У меня в системе всегда активна (хотя видел и обратное). Почему?
    3. В окне есть две разделенные группы: Рекомендуемые программы и другие программы. По какому принципу они формируется?
    В каком случае программы переходят из одной категории в другую?
    Не сказано также, что пункты раскрывающего контекстного меню "Открыть с помощью" состоят как раз из программ под категорией "Рекомендуемые".

    Уверен для новичков это все не нужно, что туда добавить судя из этой темы, сам решишь. Но я бы пп.1,2 добавил.

    Следует понимать как путь и имя, а не просто имя?

    Как думаешь, что означает Applications в этом контексте?

    Полезная ссылка MSDN - Default Programs
     
    Последнее редактирование: 25 июн 2014
    Kиpилл нравится это.
  2. Kиpилл
    Онлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Ого)
    Пью чай и даю ответ!
     
  3. Kиpилл
    Онлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Имеется ввиду что такая запись будет иметь приоритет перед другими настройками.



    Да,косяк.

    Если поставить такую галочку,то будет создано новое правило,и это будет иметь приоритет выше всех перечисленных опций.

    Если галочку не ставим то вопрос урегулируется записью:

    Код (Text):
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.**\OpenWithList
    Эта запись имеет приоритет перед текущими настройками.
    И далее по статье.

    Если стоит галочка "Использовать по умолчанию" то в реестре создается правило:

    Код (Text):
    HKEY_USERS\{SID_User}\**_auto_file
    Где {SID_User} соответственно SID пользователя,а ** это расширение файла.

    Например:
    Код (Text):
    [HKEY_USERS\S-1-5-21-1566998330-4110308949-553068737-1000_Classes\dd_auto_file]
    Для файлов с расширением .dd установлена галочка

    "Использовать выбранную программу для всех файлов такого типа..." для программы "Блокнот".

    И тогда в реестре имеем запись:

    Код (Text):
    Windows Registry Editor Version 5.00

    [HKEY_USERS\S-1-5-21-1566998330-4110308949-553068737-1000_Classes\dd_auto_file]

    [HKEY_USERS\S-1-5-21-1566998330-4110308949-553068737-1000_Classes\dd_auto_file\shell]

    [HKEY_USERS\S-1-5-21-1566998330-4110308949-553068737-1000_Classes\dd_auto_file\shell\edit]

    [HKEY_USERS\S-1-5-21-1566998330-4110308949-553068737-1000_Classes\dd_auto_file\shell\edit\command]
    @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
      00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\
      54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\
      00

    [HKEY_USERS\S-1-5-21-1566998330-4110308949-553068737-1000_Classes\dd_auto_file\shell\open]

    [HKEY_USERS\S-1-5-21-1566998330-4110308949-553068737-1000_Classes\dd_auto_file\shell\open\command]
    @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
      00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\
      54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\
      00
    Декодировав которую мы видим что в программой для открытия файлов назначен блокнот.

    И эта запись имеет приоритет перед предыдущей.
    --- Объединённое сообщение, 3 янв 2014, Дата первоначального сообщения: 3 янв 2014 ---
    Это имя ,тут я бы попытался ввести новый термин - правило
    Официально нет в реестре такого термина,но иначе по русски не объяснить.
    Этот параметр имеет такое же имя ,как указано в разделе
    Код (Text):
    HKEY_CLASSES_ROOT\Applications\
    Для конкретного приложения.

    Например в
    Код (Text):
    HKEY_CLASSES_ROOT\Applications\notepad.exe
    Явно указано что должно происходить при вызове notepad.exe - это открытие объекта программой блокнот.
    Посмотрев на команду в разделе notepad.exe\shell\open\command :
    Код (Text):
    %SystemRoot%\system32\NOTEPAD.EXE %1
    Мы наблюдаем и путь к приложению,и имя приложения и макрос.

    Но если мы поменяем все имена в
    Код (Text):
    CurrentVersion\Explorer\FileExts\.**\OpenWithList
    И
    Код (Text):
    HKEY_CLASSES_ROOT\Applications\notepad.exe
    на superproga.exe вместо NOTEPAD.exe при этом оставив прежней команду и макрос то все равно запустится блокнот.

    Таким образом мы приходим к выводу что это стоит понимать и не как путь,и не как имя а как правило или условие.

    Да простят меня парни из Microsoft за такое самовольное внедрение термина)




    Здесь перечислены разделы,имена которых имеют названия,соответствующие названиям программ.
    В имени раздела указаны команды которые должны выполняться для программ ,для которых создано правило.

    О том что используется программа,для которой есть условие в разделе
    Код (Text):
    HKEY_CLASSES_ROOT\Applications
    свидетельствует запись вида:
    1)
    Код (Text):
    proga.exe
    2)
    Код (Text):
    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4234d49b-0245-4df3-b780-3893943456e1}]
    @="Applications"
    upload_2014-1-3_20-41-44.png

    3)
    Код (Text):
    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4234d49b-0245-4df3-b780-3893943456e1}]
    @="Applications/texfile"
    Ну и соответственно далее по аналогии.
    --- Объединённое сообщение, 3 янв 2014 ---
    Тут все не сложно.
    По аналогии с UserChoice может быть прописан и ProgID ,который в свою очередь записывается в бинарном варианте,либо hex(0).

    Сам теперь подумай,что будет если в настройках указан неверный ProgID )))
    --- Объединённое сообщение, 3 янв 2014 ---
    На самом деле у тебя еще должен возникнуть вопрос по хэндлерам,я хочу про это в отдельной теме написать.
    --- Объединённое сообщение, 3 янв 2014 ---
    Вроде все ответил,ничего не забыл?
     
    Последнее редактирование: 3 янв 2014
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.309
    Спасибо. Все кратко, демонстративно и предельно ясно.
    Весьма неожиданные для меня ответы. Я то думал программа по-умолчанию изменяется в hkcr\{ prog id }\Shell\Open\Command
    Без анализа реестра не додуматься.
    Говоришь, правила? :)
    Ну я бы назвал более точнее - правило по-умолчанию для псевдонима.
    ++ такой экперимент:
    Имею inf-файл.
    поставил галку "Открывать всегда через"... WordPad, ОК.
    поставил галку "Открывать всегда через"... Notepad, ОК. (собственно так и было).
    Что произошло в реестре?
    Код (Text):
    "Progid"="inffile"
    а не Applications\\NOTEPAD.EXE, как предполагалось.
    Собственно Progid воспринимает как псевдоним, так и сам Progid типа файла.
    по каким хендлерам?
     
  5. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.309
  6. Kиpилл
    Онлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Так по моему одно и то же?
    Нет?
    Тут даже более расширенно.
     
  7. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.309
    Оно как бы так, но не всегда работает (на примере того же 7zip).
    Видимо в Win8 нужно использовать специальные API-функции, чтобы переназначать ассоциацию. Еще появилось такое понятие как "Начальный экран".
    Надо разбираться. Как вариант, раскурочить готовую программу через Process Monitor.
     
  8. Kиpилл
    Онлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Вроде разница только в:
    Но в семерке этого разве нет?
    (посмотреть не на чем)

    А что с ним не так?

    У меня отлично работает.


    Смотрел у себя на 8.1 - все то же самое,интерфейс немного изменился.
    Начальный экран - да,надо подглядеть где и что пишется,сегодня сделаю.
     
  9. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.309
    Ну как же.
    Устанавливаешь 7zip x64 (офсайт), а ассоциация 7z к архиватору не привязывается, так и остается ничейная (ОС полностью с нуля).
    Могу промониторить изменения, если нужно.
     
  10. Kиpилл
    Онлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    ну можно,а так может попробовать самому прописать?
    если и тогда уже не появится - тогда есть проблема,а так мне кажется косяк разработчиков...
    --- Объединённое сообщение, 10 янв 2014, Дата первоначального сообщения: 10 янв 2014 ---
    Код (Text):
    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\.7z]
    @="WinRAR"

    [HKEY_CLASSES_ROOT\.7z\OpenWithProgids]
    Такое есть например?
    --- Объединённое сообщение, 10 янв 2014 ---
    А лучше так:

    Код (Text):
    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\.7z]
    @="Applications\7zFM.exe"

    [HKEY_CLASSES_ROOT\.7z\OpenWithProgids]
     
  11. Kиpилл
    Онлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Так называемые обработчики.

    Чтобы определить, можно ли механизму поиска искать в содержимом файлов конкретного расширения, операционная система смотрит на значение параметра раздела реестра
    Код (Text):
    HKCR\«расширение файла»\PersistentHandler
    . Данный параметр может принимать следующие значения:
    • {098f2470-bae0-11cd-b579-08002b30bfeb} (поиск в содержимом запрещен),
    • {5e941d80-bf96-11cd-b579-08002b30bfeb} (искать в содержимом как в обычном тексте),
    • {98de59a0-d175-11cd-a7bd-00006b827d94}(искать в содержимом как в файлах пакета Microsoft Office),
    • {eec97550-47a9-11cf-b952-00aa0051fe20} (искать в содержимом как в файлах Интернет (html-файлы, css-файлы или asp-файлы).

    То есть, чтобы добавить возможность поиска в файлах с определенным расширением содержимого как в тексте, нужно создать или изменить значение параметра (по умолчанию) раздела реестра вида
    Код (Text):
    HKCR\«расширение файла»\PersistentHandler
    на {5e941d80-bf96-11cd-b579-08002b30bfeb}.
     
    Dragokas нравится это.

Поделиться этой страницей