2

--------------------------------第二次更新---------------- --------

我试过了:

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;
}

这行不通。txt文件中要打印的内容是:00000000000CDEE0 注册dll时只打印一次。之后,无论我浏览虚拟文件夹多少次,打开它,它都不会再进入 DllMain 打印字符串。


我正在使用 Microsoft windows 7.0 SDK 示例( ExplorerDataProvider )在“我的电脑”上创建一个虚拟文件夹,如下所示: 在此处输入图像描述

当我打开文件浏览器对话框时,它会显示这个虚拟文件夹。当我从 Microfost office 中单击“另存为”时,会弹出 windows 文件资源管理器对话框并仍然显示此虚拟文件夹。我写了一个 C++ 应用程序,点击“导出”也可以保存文件。它将打开 windows 文件资源管理器对话框,当用户选择目录并单击保存时,它可以保存文件。我的问题是:我希望只有当我使用我的 C++ 程序打开文件对话框时才能显示虚拟文件夹。如果我在我的应用程序之外打开 Windows 资源管理器,则虚拟文件夹是不可见的。我怎么能那样做?似乎一旦我为虚拟文件夹注册了dll,虚拟文件​​夹就一直存在。

我没有找到类似SetVisible函数的东西IShellFolder

4

1 回答 1

1

如果 GetModuleFileName(NULL) 返回的文件名不是您的 C++ 程序,您可以在 DLLMain 中返回 false。

于 2017-11-01T00:58:01.883 回答