【问题标题】:How to programmatically add a folder to Favorites in Windows File Explorer如何在 Windows 文件资源管理器中以编程方式将文件夹添加到收藏夹
【发布时间】:2013-05-20 18:52:25
【问题描述】:

我知道here 回答的解决方案。基本上,这个想法是在%USERPROFILE%\Favoriates 文件夹中创建一个指向文件夹的链接。

但是它对我不起作用。我正在使用 Windows8(不知道这是否重要)。在我的%USERPROFILE%\Favoriates 中,它包含 IE 的收藏项,而不是文件资源管理器。

我试图通过创建一个名称非常独特的文件夹并将其添加到文件资源管理器的收藏夹中来在注册表和文件系统中找到此设置。然后在注册表和文件系统中搜索名称。没有产生任何东西。

【问题讨论】:

  • 收藏夹列表旨在由用户控制。应用程序不应将它们插入用户的收藏夹。这会导致用户不满意。

标签: windows


【解决方案1】:

您似乎需要 %UserProfile%\Links。

【讨论】:

    【解决方案2】:

    以编程方式,您希望使用SHGetKnownFolderPathKNOWNFOLDERID_Links 检索位置,而不是对任何位置进行硬编码,然后使用IShellLink 在该位置创建快捷方式文件。

    这是第一部分的 C# 示例:

    [DllImport("shell32.dll")]
    static extern int SHGetKnownFolderPath(
                          [MarshalAs(UnmanagedType.LPStruct)] Guid knownFolderId, 
                          uint flags,
                          IntPtr userToken,
                          [MarshalAs(UnmanagedType.LPWStr)] out string knownFolderPath);
    
    // this corresponds to the KNOWNFOLDERID_Links constant:
    public static readonly Guid Links = new Guid("bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968");
    
    public static string GetKnownFolderPath(Guid knownFolderId)
    {
        string path;
        int result = SHGetKnownFolderPath(knownFolderId, 0, IntPtr.Zero, out path);
        // … (error handling; check result for E_FAIL, E_INVALIDARG, or S_OK)
        return path;
    }
    

    【讨论】:

      【解决方案3】:

      啊,对于 Windows 8,此位置似乎已更改为 %USERPROFILE%\Links,而不是 %USERPROFILE%\Favoriates

      所以回答我的问题。要以编程方式将文件夹添加到 Windows 8 文件资源管理器中的收藏夹,您需要在 %USERPROFILE%\Links 文件夹中创建指向该文件夹的链接:

      mklink /D %USERPROFILE%\Links\<Link_Name> <Tartget_Folder_Path>
      

      【讨论】:

      • 不要硬编码路径。使用 API(例如 SHGetKnownFolderPath)获取正确的路径。
      【解决方案4】:

      Explorer 收藏夹存储在这里%USERPROFILE%\Links

      【讨论】:

        【解决方案5】:
        Function AddAFolderShortCut($fileName, $targetPath)
        {
            Write-Host "Creating Shortcut $fileName points to $targetPath"
            $WshShell = New-Object -comObject WScript.Shell
            $Shortcut = $WshShell.CreateShortcut("$env:USERPROFILE\Links\$fileName.lnk")
            $Shortcut.TargetPath = $targetPath
            $Shortcut.Save()
        }
        
        AddAFolderShortCut "FolderName" "C:\folderpath"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-10
          • 2013-06-19
          • 1970-01-01
          相关资源
          最近更新 更多