———————————Вторые обновления ————————
Я старался:
STDAPI_(BOOL) DllMain(HINSTANCE hInstance, DWORD dwReason, void *)
{
// Get the path and module name.
WCHAR szModulePathAndName[MAX_PATH];
GetModuleFileName(hInstance, szModulePathAndName, ARRAYSIZE(szModulePathAndName));
std::ofstream outfile("DllMain.txt");
outfile << szModulePathAndName << std::endl;
outfile.close();
if (dwReason == DLL_PROCESS_ATTACH)
{
g_hInst = hInstance;
DisableThreadLibraryCalls(hInstance);
}
return TRUE;
}
Это не работает Содержание для печати в текстовом файле:
00000000000CDEE0
И это только печатать один раз, когда я регистрирую DLL. После этого, независимо от того, сколько раз я просматриваю виртуальную папку, открываю ее, DllMain никогда не вызывает повторную печать строки.
Я использую пример Microsoft Windows 7.0 SDK (ExplorerDataProvider) для создания виртуальной папки на «Моем компьютере», например:
Когда я открываю диалог браузера файлов, он отображает эту виртуальную папку.
Когда я нажимаю «Сохранить как» в офисе Microfost, появляется диалоговое окно проводника Windows, в котором по-прежнему отображается эта виртуальная папка.
Я написал приложение на C ++, которое также может сохранять файл при нажатии кнопки «экспорт».
Откроется диалоговое окно проводника файлов Windows, и когда пользователь выберет каталог и нажмет кнопку «Сохранить», он сможет сохранить файл.
Моя проблема: я надеюсь, что виртуальная папка может отображаться только тогда, когда я использую свою программу C ++, чтобы открыть диалоговое окно файла. Если я открываю проводник Windows вне моего приложения, виртуальная папка становится невидимой. Как я мог это сделать?
Кажется, что как только я регистрирую dll для виртуальной папки, виртуальная папка всегда там.
Одно из возможных решений для меня — зарегистрировать виртуальную папку dll, когда мое приложение открывает проводник Windows, а затем отменить ее регистрацию, когда пользователь закрывает ее в приложении, но пользователь все равно может видеть ее, если пользователь открывает проводник Windows за пределами окна. приложение, когда проводник Windows обнаруживается в приложении.
Я не нашел ничего подобного SetVisible
функция в IShellFolder
,
Вы можете вернуть false в DLLMain, если имя файла, возвращаемое GetModuleFileName (NULL), отличается от вашей программы на C ++.
Других решений пока нет …