簡體   English   中英

將文件夾固定到Windows資源管理器中的導航窗格

[英]Pin a folder to Navigation Pane in Windows Explorer

我想創建一個文件夾並將其固定到Windows ExplorerNavigation Pane ,但是我不確定如何執行此操作。

我想創建類似於DropBox或OneDrive文件夾的內容。

像這樣-

像這樣

我看過“ 操縱Windows 7資源管理器”導航窗格的問題,但我不認為這是我想要的。 該應用程序將在Windows 7Windows 10的計算機上運行。 是否可以在所有這些OS上執行此操作?

任何幫助將不勝感激。

本文檔中對此進行了部分記錄:盡管標題具有誤導性,但集成了Cloud Storage Provider 它適用於常規文件夾。 另外,它在Windows 7,Windows 8.x和10上也能正常工作。

因此,這是.BAT文件的內容(使用標准的reg.exe工具,但您可以輕松地用C#代碼替換它),該文件可以創建像OneDrive這樣的文件夾。 首先,您必須通過任何方式創建Guid,將“ MyExt”名稱替換為文件夾的顯示名稱,將“ c:\\ temp \\ myext”路徑替換為任何物理路徑,然后運行此.bat文件。

reg add HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000} /ve /t REG_SZ /d "MyExt" /f
reg add HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000}\DefaultIcon /ve /t REG_EXPAND_SZ /d %%SystemRoot%%\system32\imageres.dll,-111 /f
reg add HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000} /v System.IsPinnedToNameSpaceTree /t REG_DWORD /d 0x1 /f
reg add HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000} /v SortOrderIndex /t REG_DWORD /d 0x42 /f
reg add HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000}\InProcServer32 /ve /t REG_EXPAND_SZ /d %%systemroot%%\system32\shell32.dll /f
reg add HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000}\Instance /v CLSID /t REG_SZ /d {0E5AAE11-A475-4c5b-AB00-C66DE400274E} /f
reg add HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000}\Instance\InitPropertyBag /v Attributes /t REG_DWORD /d 0x11 /f
reg add HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000}\Instance\InitPropertyBag /v TargetFolderPath /t REG_EXPAND_SZ /d "c:\temp\myext" /f
reg add HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000}\ShellFolder /v FolderValueFlags /t REG_DWORD /d 0x28 /f
reg add HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000}\ShellFolder /v Attributes /t REG_DWORD /d 0xF080004D /f
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{YOURGUID-GOES-HERE-0000-000000000000} /ve /t REG_SZ /d "MyExt" /f
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel /v {YOURGUID-GOES-HERE-0000-000000000000} /t REG_DWORD /d 0x1 /f

請注意,這將為當前用戶注冊該文件夾(因此您在注冊表中不需要特殊權限),但是如果要為整個計算機注冊該文件夾,則必須將HKCU替換為HKLM(然后,需要適當的權利)。

還要注意,我在imageres.dll中選擇了默認圖標,但是您當然可以使用其他任何圖標。

這是Windows 10上的樣子: 在此處輸入圖片說明


要從窗格中刪除文件夾,請創建另一個具有以下內容的.BAT文件:

reg delete HKCU\Software\Classes\CLSID\{YOURGUID-GOES-HERE-0000-000000000000}
reg delete HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{YOURGUID-GOES-HERE-0000-000000000000}
reg delete HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel

這是一個C#代碼,用於為當前用戶添加Shell文件夾。 如果要為本地計算機添加它,請將RegistryHive.CurrentUser更改為RegistryHive.LocalMachine (在這種情況下,您將需要提升的訪問權限)。

要添加外殼文件夾:

void fnCreateShellFolder(string strGUID, string strFolderTitle, string strTargetFolderPath, string strIconPath)
{
    RegistryKey localKey, keyTemp, rootKey;
    if (Environment.Is64BitOperatingSystem)
        localKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
    else
        localKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32);

    rootKey = localKey.CreateSubKey(@"Software\Classes\CLSID\{" + strGUID + "}");
    rootKey.SetValue("", strFolderTitle, RegistryValueKind.String);
    rootKey.SetValue("System.IsPinnedToNameSpaceTree", unchecked((int)0x1), RegistryValueKind.DWord);
    rootKey.SetValue("SortOrderIndex", unchecked((int)0x42), RegistryValueKind.DWord);

    keyTemp = rootKey.CreateSubKey(@"DefaultIcon");
    keyTemp.SetValue("", strIconPath, RegistryValueKind.ExpandString);
    keyTemp.Close();

    keyTemp = rootKey.CreateSubKey(@"InProcServer32");
    keyTemp.SetValue("", @"%systemroot%\system32\shell32.dll", RegistryValueKind.ExpandString);
    keyTemp.Close();

    keyTemp = rootKey.CreateSubKey(@"Instance");
    keyTemp.SetValue("CLSID", "{0E5AAE11-A475-4c5b-AB00-C66DE400274E}", RegistryValueKind.String);
    keyTemp.Close();

    keyTemp = rootKey.CreateSubKey(@"Instance\InitPropertyBag");
    keyTemp.SetValue("Attributes", unchecked((int)0x11), RegistryValueKind.DWord);
    keyTemp.SetValue("TargetFolderPath", strTargetFolderPath, RegistryValueKind.ExpandString);
    keyTemp.Close();

    keyTemp = rootKey.CreateSubKey(@"ShellFolder");
    keyTemp.SetValue("FolderValueFlags", unchecked((int)0x28), RegistryValueKind.DWord);
    keyTemp.SetValue("Attributes", unchecked((int)0xF080004D), RegistryValueKind.DWord);
    keyTemp.Close();
    rootKey.Close();

    keyTemp = localKey.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{" + strGUID + "}");
    keyTemp.SetValue("", strFolderTitle, RegistryValueKind.String);
    keyTemp.Close();

    keyTemp = localKey.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel");
    keyTemp.SetValue("{" + strGUID + "}", unchecked((int)0x1), RegistryValueKind.DWord);
    keyTemp.Close();
}

刪除外殼文件夾:

static void fnRemoveShellFolder(string strGUID)
{
    RegistryKey localKey;
    if (Environment.Is64BitOperatingSystem)
        localKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
    else
        localKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32);

    localKey.DeleteSubKeyTree(@"Software\Classes\CLSID\{" + strGUID + "}", false);
    localKey.DeleteSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{" + strGUID + "}", false);
    localKey.DeleteSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel", false);
}

您可能需要重新啟動資源管理器才能看到更改。

// restart explorer
foreach (System.Diagnostics.Process exe in System.Diagnostics.Process.GetProcesses())
    if (exe.ProcessName == "explorer")
        exe.Kill();

我只更改了Mangesh的一行代碼,現在一切正常。 因為當我調用Mangesh的fnRemoveShellFolder時, 也會刪除桌面圖標,例如“計算機”,“控制面板”和“用戶”。 即使他們沒有從“桌面圖標設置”中被選中。

localKey.DeleteSubKeyTree(@"Software\Classes\CLSID\{" + GUID + "}", false);
localKey.DeleteSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{" + GUID + "}", false);
tempKey = localKey.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel", true);
tempKey.DeleteValue("{" + GUID + "}", false);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM