2016-01-10 5 views
0

Я сторонник, и я хотел бы запустить приложение 1-й стороны и как-то виртуализировать папку с документом, в которой я бы определил местоположение.
Первое приложение не коснется реальной папки «мой документ», но вместо этого сохранит файл в том месте, которое я бы установил. Я не хочу изменять записи в реестре для личных папок, я хочу это только для этого приложения.Попытка «эмулировать» папку с документом

Я сделал некоторые исследования, но не нашел ничего подобного. Возможно ли это без виртуальной машины? Я бы попытался работать в VB6, я хочу проверить что-то на xp и win7. Речь идет о редизайне игры, и я хотел бы, чтобы у человека была моя программа, и оригинальная игра, установленная на ПК, без папок конфигурации в «моем документе».

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

Спасибо! Yanick

+0

Я думаю, что здесь есть 2 проблемы. Первый - VB6. Второй - ваш вопрос может быть слишком широким. Из выдержки из заглавной причины: _ Есть слишком много возможных ответов, или хорошие ответы будут слишком длинными для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или изолировать проблему, на которую можно ответить в нескольких параграфах. –

+0

Привет @ C-Pound, Мне не обязательно использовать VB6. Проблема проста, и решение может быть любым, что работает, я не нахожу ничего, что было бы, и я бы предпочел не виртуализировать весь компьютер только для этого ..., я хочу иметь модифицированную версию игры, но я не хотите, чтобы все настройки и конфигурации (которые находятся в моем документе) сливались с одной из исходных игр, если человек установлен. Исполняемый файл автоматически создает свои настройки в «Мой документ» по умолчанию. Спасибо за ваше время, Yanick –

ответ

0

Моим решением было выполнить поиск исполняемого файла с помощью шестнадцатеричного редактора и вручную отредактировать его в другой папке. Конечно, мне пришлось выбирать папку с меньшим или равным числом или символом на пути. Спасибо всем.

0

Конечно, вы можете с текстовым файлом (или программой). MS упростила работу.

Вот кто-то со ссылкой на свой пост, который со ссылкой на Raymond Chen непосредственно,

http://www.pcreview.co.uk/threads/re-create-system-folder.522854/

Создание расширений оболочки с Shell Instance Объекты Raymond Chen Microsoft Corporation

февраля 2000

Реферат: Расширение пространства имен традиционной оболочки требует вмешательства lementation COM-процесса сервера. Объекты экземпляра оболочки позволяют вам создавать простые расширения оболочки без необходимости писать одну строку кода . В этой статье описано, как объекты экземпляра оболочки и объекты команд оболочки могут использоваться для простого развертывания простых расширений оболочки. (5 печатных страниц)

Содержание Что такое расширение пространства имен оболочки? Что такое объект экземпляра оболочки? Объекты оболочки, которые могут быть созданы как объекты экземпляра оболочки Как насчет примера? Shell Command Objects Заключение

Что такое расширение пространства имен оболочки? Расширения пространства имен Shell позволяют создавать «виртуальные папки» в оболочке . Например, значок корзины на рабочем столе не является фактическим каталогом файловой системы , а представляет собой набор элементов, который является , поддерживаемый расширением оболочки корзины.

Сведения о создании расширения пространства имен оболочки можно найти в SDK разделе MSDN Online Library (http://msdn.microsoft.com/library/psdk/shellcc/shell/shell_adv/namespace.ht м) Платформа .

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

Что такое объект экземпляра оболочки? Объект экземпляра оболочки представляет собой специальный вид расширения оболочки, предоставляемый компонентом shdocvw.dll . Если для реализации традиционного расширения оболочки требуется DLL для реализации объекта, объект экземпляра оболочки извлекает все, что должно знать из реестра.

Как оболочка создает объект экземпляра оболочки

1 .. Компонент shdocvw.dll загружается в силу того, зарегистрирован как InProcServer32 для объекта экземпляра оболочки.

2 .. Когда shdocvw.dll просят создать объект, он иначе не принимает , он проверяет ключ реестра для подраздела с именем Instance. Если найдено, , он считывает значение CLSID этого подраздела и передает этот CLSID функции CoCreateInstance. (Из-за отсутствия лучшего термина, давайте назовем это «хозяин» объекта.)

3 .. Далее shdocvw.dll ищет подраздел Instance имени InitPropertyBag или InitStream. Если он найден, он затем создает IPropertyBag или IStream (соответственно) на основе содержимого раздела реестра и передает его в метод IPersistPropertyBag :: Load или IPersistStream :: Load (соответственно) .

4 .. Наконец, shdocvw.dll возвращает инициализированный хост-объект как объект экземпляра оболочки . Объекты оболочки, которые могут быть созданы в качестве объектов экземпляра оболочки Существует два объекта оболочки, которые поддерживают объект-хост объекта экземпляра оболочки , а именно объект ссылки Shell и ярлык папки оболочки Shell .

Оба эти объекта поддерживают интерфейс IPersistPropertyBag, поэтому вы можете использовать метод инициализации InitPropertyBag, используя метод InitPropertyBag. (Это так случается, что оба объекта также поддерживает IPersistStream, но инициализация ярлыка из потока в реестра является гораздо более громоздким.)

Мешок недвижимости вы предоставите в реестре описывает цель ссылки оболочки или папку оболочки ярлык. Для этой собственности есть три поддерживаемые формы .

Таргетинг снаряд специальной папки

InitPropertyBag 
TargetSpecialFolder=REG_SZ:"<special folder number>" 

Обратите внимание, что это значение реестра REG_SZ, даже если она представляет собой целого. Поддерживаются как десятичные, так и шестнадцатеричные обозначения.

Таргетинг каталога внутри оболочки специальной папки

InitPropertyBag 
TargetSpecialFolder=REG_SZ:"<special folder number>" 
Target=REG_SZ:"<subdirectory name>" 

Подкаталога имя может содержать встроенный обратный слэши.

Ориентация каталога с помощью явного пути

InitPropertyBag 
Target=REG_SZ:"<full path to target directory>" 

Как насчет примера? Вот копия регистрации, которая создает значок папки Fonts в панели управления:

HKEY_CLASSES_ROOT 
CLSID 
{D20EA4E1-3957-11D2-A40B-0C5020524152}=REG_SZ:"Fonts" 
InfoTip=REG_SZ:"Displays and manages fonts on your computer" 
DefaultIcon=REG_EXPAND_SZ:"%SystemRoot%\system32\main.cpl,9" 
InProcServer32=REG_EXPAND_SZ:"%SystemRoot%\system32\shdocvw.dll" 
ThreadingModel=REG_SZ:"Apartment" 
ShellFolder 
Attributes=REG_DWORD:0x60000000 
WantsFORPARSING=REG_SZ:"" 
Instance 
CLSID=REG_SZ:"{0AFACED1-E828-11D1-9187-B532F1E9575D}" 
InitPropertyBag 
TargetSpecialFolder=REG_SZ:"0x0024" 
Target=REG_SZ:"Fonts" 

Поскольку {D20EA4E1-3957-11D2-A40B-0C5020524152} зарегистрирован в пространстве имен Панели управления , папки ярлык шрифтов установлен на панели управления.

Пройдите через этот раздел реестра шаг за шагом.

a .. GUID {D20EA4E1-3957-11D2-A40B-0C5020524152} был создан , запускающим программу uuidgen, найденную в Platform SDK. Конечно, когда вы создаете свои собственные объекты экземпляра, вы должны запустить uuidgen и использовать свой собственный GUID. Здесь также указывается имя значка, отображаемого в пространстве имен .

b .. Дополнительная информация о строке InfoTip отображается, когда пользователь наводил курсор на значок .

c .. Строка DefaultIcon предоставляет имя и индекс значков для значка для отображения этого элемента.

d .. Ключ InProcServer32 должен быть установлен в файл shdocvw.dll, а модель резьбы должна быть установлена ​​в «Квартира».

e .. Клавиша ShellFolder устанавливает атрибуты в набор значений SFGAO_ , которые мы хотим применить к ярлыку папки. Флаг SFGAO_FOLDER всегда должен быть установлен. Поскольку целью является папка файловой системы, флаг SFGAO_FILESYSTEM также устанавливается в атрибутах, а значение WantsFORPARSING устанавливается в пустую строку. (Если цель не является папкой файловой системы, значение WantsFORPARSING не должно быть создано.)

е .. Экземпляр ключ устанавливает значение CLSID для строкового представления CLSID_FolderShortcut. Это указывает на то, что экземпляр объекта должен создать ярлык папки .

g .. Ключ InitPropertyBag указывает, что ярлык папки будет , инициализированный интерфейсом IPersistPropertyBag. Два значения внутри поля определяют, что целью является подкаталог «Шрифты» в специальной папке 0x0024, которая является CSIDL_WINDOWS. Shell Command Objects Другой тип объекта расширения оболочки - это значок, который при двойном щелчке запускает команду. Это тоже можно создать без необходимости писать сервер COM . Например, здесь есть объект команды, который используется в папке My Network Места:

HKEY_CLASSES_ROOT 
CLSID 
{D4480A50-BA28-11d1-8E75-00C04FA31A86}=REG_SZ:"Add Network Place" 
InfoTip=REG_SZ:"Connects to shared folders, Web folders, and FTP 
sites." 
DefaultIcon=REG_EXPAND_SZ:"%SystemRoot%\System32\netplwiz.dll,-107" 
ShellFolder 
Attributes=REG_DWORD:0x00000000 
Shell 
Open 
Command=REG_EXPAND_SZ:"rundll32 ..." 

Большая часть этого раздела реестра должно выглядеть знакомым, так что я буду только подчеркнуть отличия от оболочки, например объекты:

a .. Нет InProcServer32 ключ.

b .. Атрибуты ключа ShellFolder должны опускать флаг SFGAO_FOLDER , потому что этот элемент не является папкой.

c ..Вместо ключа Instance у нас есть ключ Shell, который имеет ту же структуру , что и прогидный ключ. Глагол «Открыть» является действием по умолчанию для двойным щелчком. Вы также можете создавать другие глаголы, которые будут отображаться в контекстном меню . Например, значок Internet Explorer создает пользовательский глагол под названием «Открыть домашнюю страницу». Подробная информация о структуре ключа Shell приведена в разделе «Платформа SDK » в онлайн-библиотеке MSDN в разделе «Расширение» «Контекстные меню» (http://msdn.microsoft.com/library/psdk/shellcc/shell/shell_basics/context.h tm).

Заключение Объекты экземпляра оболочки и объекты командной оболочки позволяют развертывать простые расширения оболочки с минимальным объемом работы. Например, вы можете создать объект команды в папке «Панель управления» под названием «Устранение неполадок», , которая запускает программу устранения неполадок. Или вы можете создать экземпляр оболочки объект, который размещает ярлык папки для коллекции администраторов системы на общем сетевом сервере. Объекты экземпляра оболочки и команда оболочки объекты позволяют легко развертывать эти типы расширений оболочки.

+0

Это действительно интересно, но это не относится к моему вопросу, потому что я только пытаюсь заблокировать доступ к папке «Мои документы» только из одного приложения. –

Смежные вопросы