Страницы

Поиск по вопросам

четверг, 19 марта 2020 г.

Создание Shell Extentions

#c_sharp #файлы #ntfs


Здравствуйте, Уважаемые Хэшкодовцы!
Благодаря Вам узнал об альтернативных потоках данных для файлов на NTFS системе.
Благодаря интернету научился с ними работать через командную строку. Может кому интересно:
echo some file > file.txt

создали/перезаписали информацию в файлу "file.txt" текстом "some file"
echo some description > file.txt:desc

создали/перезаписали альтернативный поток с именем "desc" для файла "file.txt"
more < file.txt
type file.txt

отобразили в окне консоли информацию содержащейся в файле "file.txt". В нашем случае
"some file"
more < file.txt:desc

отобразили в окне консоли информацию из альтернативного потока с именем desc.
dir /r

отобразили список всех файлов в текущем каталоге с их альтернативными потоками

В общем выше была лирика, это может кому пригодится. Теперь собственно сам вопрос:
Как реализовать окно свойств, которое отобразит данные из альтернативного потока
В интернете нахожу много информации, как реализовать свою Shell Extentions. Но информации
очень много на английском языке (или я просто не могу найти аналогичной информации
на русском), что сильно затрудняет поиски решения с моими познаниями "вражеского" языка.
Многие примеры рассказывают как перехватить выполнение команды, как добавить в контекстное
меню файлов свои пункты, но это все не то. Мне нужно открыть окно свойств файла, в
открывшемся окне свойств добавить свою закладку с конкретным именем, на закладке расположить
компонент позволяющий просматривать текстовую информацию (ну пусть скажем это будет
RichTextView) ну и поместить туда информацию из альтернативного потока с конкретным
именем. 
Как читать информацию из альтернативного потока примеры я нашел, думаю разберусь
самостоятельно, а вот реализацией персональной закладки свойств для файла - увы не
получается. На всякий случай уточню, расширений файлов будет несколько, для которых
данное окно свойств должно появиться (ну например это будут .ex1, .ex2), и если есть
такая возможность, окно свойств не отображать, в случае если альтернативного потока
данных с нужным именем отсутствует у файла).
Забегая немного вперед, хотел бы еще возможность отображать окно свойств для нескольких
выбранных файлов, но с этим сначала попробую сам разобраться.
Что собственно хочу от вас?

Желательно ссылку на документацию по моей проблеме. Как я понял, махинаций которые
можно вытворять при помощи Shell Extentions навалом, человеку который этим никогда
не занимался - темный лес.
Если есть конкретный пример подобной реализации на c# - буду признателен. Желательно
конечно, чтобы код не был навороченным, достаточно самых основ, далее будем плясать
от печки по принципу удочки.
Ну и самое "здоровское" для меня, как для начала изучения проблемы - это подсказка,
с чего начать писать модуль? Какие интерфейсы должны быть реализованы?

PS: Если все это будет еще и на русском языке - вообще вам цены не будет =)
Заранее спасибо, что дочитали все это до конца, и за ваши ответы.    


Ответы

Ответ 1



В силу ряда проблем Microsoft не рекомендует писать расширения для обозревателя с помощью управляемого кода и не планирует поддерживать разработку подобных расширений. На неуправляемом коде добавление страницы свойств происходит согласно руководству (на английском): How to Register and Implement a Property Sheet Handler for a File Type. Если все же браться за расширение на C#, то в качестве исходной точки можно взять готовый проект на C# (на английском): Property Sheet Shell Extension in C#.

Ответ 2



Ваша проблема уже давно решена. Могу дать пример. AltStreamOverlay (с исходным кодом)

Комментариев нет:

Отправить комментарий