![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с установкой компонента [D6, WinXP]
Elen © (2006-09-19 13:38:00)Господа!
Мне нужно получать информацию из вкладки "сводка" свойств файла. Вот посоветовали компонентик PropSheet.
Когда я инсталю его Package, мне сообщают что $DENYPACKAGEUNIT 'ComServ' cannot be put into a package
Я знаю что это означает что ComServ скомпилен так, что его лучше в Package не ставить, но именно в package его требует следующий код :
initialization
TFWPropertySheetFactory.Create( ComServer, TFWPropertySheet,
Class_FWPropertySheet, 'CharacterPage', '', ciMultiInstance, tmApartment);
finalization
ReleaseActivateManifestContext;
end.
т.е. переменка ComServer берется из ComServ.
Внимание вопрос: как можно это обойти.
И кстати - знает ли кто готовые компоненты, которые могут поместить/вытянуть инфу из вкладок свойств файла
Если вопрос не в тему - извиняюсь зарание...
Elen (2006-09-20 11:05:00) [1]
> Наиль
Большое спасибо. Мне даже нужнее работать не с потоком "сводка", а самостоятельно создавать поток для файла - типа хранить секретную инфу
Elen (2006-09-20 10:40:00) [2]
> Проверил что получается WinRar'ом.
А вижу вижу. у меня тоже удалось
Наиль (2006-09-20 10:18:00) [3]Проверил что получается WinRar'ом.
Имена потоков идут послеSTM:
А файл сводки имеет такое название
filename:=#5'SummaryInformation';
Elen (2006-09-20 10:08:00) [4]
> Наиль
Сейчас пока получается такmore 1.txt:stream.
Теперь бы узнать имя нужного потока... Я еще почитаю ссылочку.
А с винраром не выходит. не пойму куда он потоки сохраняет
Наиль (2006-09-20 09:58:00) [5]> 1.txt > 2.dat:1.txt
Извеняюсь, за неточное востановление текста.
В оригинале было так.
type 1.txt > 2.dat:1.txt
Elen (2006-09-20 09:55:00) [6]
> Наиль
Чего-то с раром не выходит
> 1.txt > 2.dat:1.txt
> del 1.txt
> more <2.dat:1.txt
А это дает пустой файл 2.dat
Elen (2006-09-20 09:48:00) [7]
> Надеюсь не забыла про "Сохранять файловые потоки"? (см.
> [1])
Выставленно. Щас попробую nsx.
Наиль (2006-09-20 09:32:00) [8]
> Кстати я пробую Раром, но в файле нет и намека на сводки,
> хотя идея работать другой прогой интересна.
Надеюсь не забыла про "Сохранять файловые потоки"? (см. [1])
Желательно сохранять пустой файл со сводкой.
Кстати программа по ссылке в [3] отлично отделяет поток от файла.
При пустой сводке альт.поток может отсутствовать.
В файле-потоке-сводке (файле сводки) строки в уникоде. Их легче распозновать, если написаны латинецей. Первые два символа наводят на мысль, что существует три формата файла: 1 для ANSI и 2 для Unicode.
Elen (2006-09-20 09:19:00) [9]
> Наиль
Да, мне уже ясно. Что-ж придется работать с этим интерфейсом... :-\
Кстати я пробую Раром, но в файле нет и намека на сводки, хотя идея работать другой прогой интересна.
Наиль (2006-09-20 09:06:00) [10]
> попробую юзать ДЛЛки,
Бесполезно, ибо они не предоставляют ни каких функций. docprop2.dll предоставляет только COM-объект реализующий IShellPropSheetEx (или нечто подобное). Напомню, что IShellPropSheetEx предназначен для выдачи закладок окна свойств в любом другом окне. К примеру на твоей форме.
Elen (2006-09-20 07:58:00) [11]
> Наиль
Весьма Благодарствую. Я имею дело с NTFS, поэтому должно получиться. попробую юзать ДЛЛки, а то мне с интерфейсами не особо понятно
Спасибо за ссылки
Всего наилучшего!
Наиль (2006-09-19 18:33:00) [12]Так как этим вопросом до этого не занимался, то провёл небольшое раследование. Во-первых IShellPropSheetEx описывается в справке по Win32.
Во-вторых информация "сводка" выдаётся библиотеками docprop.dll или docprop2.dll. В-третьих, в сети можно прочитать о создании закладок (поиск по PropertySheetHandlers DllRegisterServer). Анализ показал, что не существует интерфейса для получения сведений из закладки "сводка". Можно лишь вызвать соотвествующую закладку в своей программе.
А теперь о главном.
Я начинал заниматься закладкой сводкой до того, как узнал, что такое COM. Правда ограничился тем, что определил в каком порядке нужно
буду писать программу для получения сведений о свойстве файла.
(от постановки задачи до нахождения пути решения потребовалось 2 дня)
Сразу обратим внимание на то, что для файлов расположеных на FAT-дисках сводка отсутствует. Дело в том, что в NTFS файлы состоят из потоков данных. Тот что мы видим в проднике основной. Вторичные (правильно - альтернативные) потоки никак не обнаруживаются, но занимают место на диске и могут содержать информацию.
Запись и чтение в дополнительный поток:
1.txt > 2.dat:1.txt
del 1.txt
more <2.dat:1.txt
Так вот. Сводка как раз в таком потоке и храниться. Правда для получения этой информации нужно знать имя потка. Слава богу онj всегда одно. И WinRar его знает. Правда в названии используется символ с кодом меньше 32. Но это уже другая проблема. Используя [1] можно разобраться с форматом потока. Остальное дело техники.
Только что нашёл:
http://amdf.pp.ru/alternate_data_streams.php- принципы работы с потоками теория и C++
http://amdf.pp.ru/nsx.php- программа для работы с потоками.
Думая с меня на сегодня хватит.
PS. Если что извеняйте, потерял текст при попытке отправить в закрытую ветку. Пришлось востаналивать.
Elen (2006-09-19 15:41:00) [13]
> Наиль
C компонентом не получилось...:-( Какие другие?... IShellPropSheet?
Я не могу на него литературу найти уже ищу сколько... Хоть бы примерчик...
Наиль (2006-09-19 15:21:00) [14]Тоже немного не в тему.
Заполни свойства какого-нибудь файла, желательно английскими буквами.
Заархивируй WinRar'ом без сжатия с отметкой "Сохранять файловые потоки" (на закладке Дополнительно). Можешь анализировать полученый архив.
Это я к тому, что если с компонентом не получится, то есть другие способы получения "сводки".