0

我正在 Windows 10 IOT 企业版上创建一个带有 shell 命名空间扩展的虚拟文件夹。我使用的代码来自微软提供的 windows 7 SDK samplesm。这是整个项目:https ://github.com/pauldotknopf/WindowsSDK7-Samples/tree/master/winui/shell/shellextensibility/explorerdataprovider

该项目在 Windows 7 和 Windows 10 上完美运行,但在 Windows 10 iot Enterprise 上运行“regsvr32 explorerdataprovider.dll”后,虚拟文件​​夹图标确实显示在“我的电脑”下,但双击该图标后,没有任何反应。 在此处输入图像描述

所以我对此进行了调试,发现该函数DllGetClassObject从未被调用过。我的猜测是windows 10 iot enterprise registry for shell namespace extension和windows 10不同,所以我上网搜索尝试添加足够的registry key,目前我使用的registry是:

 REGSTRUCT rgRegEntries[] =
{
    HKEY_CURRENT_USER,   L"Software\\Classes\\CLSID\\%s",                  szFolderViewImplClassID, NULL,                   (LPBYTE)g_szExtTitle,       REG_SZ,
    HKEY_CURRENT_USER,   L"Software\\Classes\\CLSID\\%s\\InprocServer32",  szFolderViewImplClassID, NULL,                   (LPBYTE)L"%s",              REG_SZ,
    HKEY_CURRENT_USER,   L"Software\\Classes\\CLSID\\%s\\InprocServer32",  szFolderViewImplClassID, L"ThreadingModel",      (LPBYTE)L"Apartment",       REG_SZ,
    HKEY_CURRENT_USER,   L"Software\\Classes\\CLSID\\%s\\DefaultIcon",     szFolderViewImplClassID, NULL,                   (LPBYTE)L"shell32.dll,-42", REG_SZ,
    HKEY_CURRENT_USER,   L"Software\\Classes\\CLSID\\%s\\ShellFolder",     szFolderViewImplClassID, L"Attributes",          (LPBYTE)&dwData,            REG_DWORD,
    HKEY_CURRENT_USER,   L"Software\\Classes\\CLSID\\%s",                  szContextMenuClassID,    NULL,                   (LPBYTE)g_szExtTitle,       REG_SZ,
    HKEY_CURRENT_USER,   L"Software\\Classes\\CLSID\\%s\\InprocServer32",  szContextMenuClassID,    NULL,                   (LPBYTE)L"%s",              REG_SZ,
    HKEY_CURRENT_USER,   L"Software\\Classes\\CLSID\\%s\\InprocServer32",  szContextMenuClassID,    L"ThreadingModel",      (LPBYTE)L"Apartment",       REG_SZ,

    HKEY_CLASSES_ROOT, L"CLSID\\%s", szFolderViewImplClassID, NULL, (LPBYTE)g_szExtTitle, REG_SZ,
    HKEY_CLASSES_ROOT, L"CLSID\\%s\\InprocServer32", szFolderViewImplClassID, NULL, (LPBYTE)L"%s", REG_SZ,
    HKEY_CLASSES_ROOT, L"CLSID\\%s\\InprocServer32", szFolderViewImplClassID, L"ThreadingModel", (LPBYTE)L"Apartment", REG_SZ,
    HKEY_CLASSES_ROOT, L"CLSID\\%s\\DefaultIcon", szFolderViewImplClassID, NULL, (LPBYTE)L"%s,0", REG_SZ,
    HKEY_CLASSES_ROOT, L"CLSID\\%s\\ShellFolder", szFolderViewImplClassID, L"Attributes", (LPBYTE)&dwData, REG_DWORD,

    ////----------------------------------------------------------------------------------------
    HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\%s",szFolderViewImplClassID, NULL,                   (LPBYTE)g_szExtTitle,       REG_SZ,
    HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\DelegateFolders\\%s",szFolderViewImplClassID, NULL,                   (LPBYTE)g_szExtTitle,       REG_SZ,

    HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\%s",szFolderViewImplClassID, NULL,                   (LPBYTE)g_szExtTitle,       REG_SZ,

    //HKEY_LOCAL_MACHINE, L"\\%s",szFolderViewImplClassID, NULL,                   (LPBYTE)g_szExtTitle,       REG_SZ,

    HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved",szFolderViewImplClassID, NULL,                   (LPBYTE)g_szExtTitle,       REG_SZ,

    ////----------------------------------------------------------------------------------------
    // For performance, only context menu verbs that register this are considered when the user double-clicks.
    HKEY_CURRENT_USER,   L"Software\\Classes\\CLSID\\%s\\ShellEx\\MayChangeDefaultMenu",                szContextMenuClassID, NULL,  (LPBYTE)L"",                  REG_SZ,
    // register the context menu handler under the FolderViewSampleType type.
    HKEY_CURRENT_USER,   L"Software\\Classes\\FolderViewSampleType\\shellex\\ContextMenuHandlers\\%s",  szContextMenuClassID, NULL,  (LPBYTE)szContextMenuClassID, REG_SZ,
};

但它仍然不起作用。

virtul 文件夹的 shell 命名空间扩展是否缺少任何注册表项?

4

1 回答 1

0

不确定这是否有帮助,但注册表中有 2 个位置用于虚拟文件夹(它们的路径非常相似,因此很容易错过):

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace

此外,在 Win10 x64 上,不要忘记将虚拟文件夹添加到WOW6432Node等效项:

HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace
于 2020-05-18T08:51:34.510 回答