c++ - 如何仅当用户从 win 7 上的应用程序打开 Windows 资源管理器时才显示虚拟文件夹?

标签 c++ windows hwnd shell-extensions shell-namespace-extension

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

我试过:

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) 在“我的电脑”上创建一个虚拟文件夹,如下所示: enter image description here

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

我在 IShellFolder 中没有找到类似 SetVisible 的函数。

最佳答案

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

关于c++ - 如何仅当用户从 win 7 上的应用程序打开 Windows 资源管理器时才显示虚拟文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47046004/

相关文章:

c++ - LNK2028 和 LNK2019 错误

c++ - istream::peek 奇怪的行为。结束符

c++ - 编译错误 : expected ‘)’ before ‘&’ token

c++ - 是否可以将一个字符串的两个索引添加到一个字符,然后将该字符转换为 C++ 中的 int?

windows - 为自动测试禁用 Windows 防火墙弹出窗口

android - 亚行外壳错误 : app_process not found

window - QML 获取加载的 qml 窗口的 winId

c++ - 二叉树搜索实现和函数声明c++

c++ - 需要帮助使用 NtCreateFile() 通过 fileIndex 打开

windows - 确定窗口属于桌面还是 Windows 应用商店应用