如何仅当用户从 win 7 上的应用程序打开 windows 资源管理器时才显示虚拟文件夹?
how to display the virtual folder only when user open the windows explorer from an app on win 7?
--------------------------------二次更新------------ --------------
我试过了:
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) 在 "My Computer" 上创建一个虚拟文件夹,如下所示:
当我打开文件浏览器对话框时,它会显示这个虚拟文件夹。
当我从 Microfost 办公室单击 "Save as" 时,会弹出 windows 文件资源管理器对话框并仍然显示此虚拟文件夹。
我写了一个C++应用程序,它也可以在点击"export"时保存文件。
它将打开 windows 文件资源管理器对话框,当用户选择目录并单击保存时,它可以保存文件。
我的问题是:我希望虚拟文件夹只能在我使用我的C++程序打开文件对话框时显示。如果我在我的应用程序外打开 windows 资源管理器,虚拟文件夹是不可见的。我怎么能那样做?
似乎一旦我为虚拟文件夹注册了dll,虚拟文件夹就一直存在。
对我来说,一种可能的解决方案是在我的应用程序打开 windows 文件资源管理器时注册虚拟文件夹 dll,然后在用户在应用程序中关闭它时注销它,但如果用户打开 windows,用户仍然可以看到它=31=] 当 windows 文件资源管理器出现在应用程序中时,应用程序外部的资源管理器。
我在 IShellFolder
中没有找到类似 SetVisible
的函数。
如果 GetModuleFileName(NULL) 编辑的文件名 return 不是您的 C++ 程序,您可以在 DLLMain 中 return false。
--------------------------------二次更新------------ --------------
我试过了:
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) 在 "My Computer" 上创建一个虚拟文件夹,如下所示:
当我打开文件浏览器对话框时,它会显示这个虚拟文件夹。 当我从 Microfost 办公室单击 "Save as" 时,会弹出 windows 文件资源管理器对话框并仍然显示此虚拟文件夹。 我写了一个C++应用程序,它也可以在点击"export"时保存文件。 它将打开 windows 文件资源管理器对话框,当用户选择目录并单击保存时,它可以保存文件。 我的问题是:我希望虚拟文件夹只能在我使用我的C++程序打开文件对话框时显示。如果我在我的应用程序外打开 windows 资源管理器,虚拟文件夹是不可见的。我怎么能那样做? 似乎一旦我为虚拟文件夹注册了dll,虚拟文件夹就一直存在。 对我来说,一种可能的解决方案是在我的应用程序打开 windows 文件资源管理器时注册虚拟文件夹 dll,然后在用户在应用程序中关闭它时注销它,但如果用户打开 windows,用户仍然可以看到它=31=] 当 windows 文件资源管理器出现在应用程序中时,应用程序外部的资源管理器。
我在 IShellFolder
中没有找到类似 SetVisible
的函数。
如果 GetModuleFileName(NULL) 编辑的文件名 return 不是您的 C++ 程序,您可以在 DLLMain 中 return false。