为什么只有带有我的文件扩展名的文件出现在Windows 7跳转列表中?

时间:2011-03-28 00:31:50

标签: c# windows-7 jump-list

我正在尝试将我们的应用与Windows 7跳转列表正确集成。我们允许在应用程序中打开文件,我刚才添加了这些文件,将项目添加到跳转列表中:

var list = JumpList.CreateJumpList()
list.AddToRecent(file);
list.Refresh();

其中JumpList来自WindowsAPICodePack

这种方法存在两个问题。

  1. 有时用户会在Refresh()调用中获得ComException(无法删除要替换的文件。(HRESULT异常:0x80070497))。
  2. JumpList只包含具有应用程序文件扩展名的文件。
  3. 我们允许通过Open方法在我们的应用程序中导入其他文件,我希望这些文件也显示在跳转列表中,但它们不会。

    我在这里搜索了有关JumpLists的问题,并找到了另一种在answer中添加最近使用过的文件的方式:

        void AddFileToRecentFilesList(string fileName)
        {
            SHAddToRecentDocs((uint)ShellAddRecentDocs.SHARD_PATHW, fileName);          
        }
    
        /// <summary>
        /// Native call to add the file to windows' recent file list
        /// </summary>
        /// <param name="uFlags">Always use (uint)ShellAddRecentDocs.SHARD_PATHW</param>
        /// <param name="pv">path to file</param>
        [DllImport("shell32.dll")]
        public static extern void SHAddToRecentDocs(UInt32 uFlags,
            [MarshalAs(UnmanagedType.LPWStr)] String pv);
    
        enum ShellAddRecentDocs
        {
            SHARD_PIDL = 0x00000001,
            SHARD_PATHA = 0x00000002,
            SHARD_PATHW = 0x00000003
        }
    

    这似乎更合适,因为它也向后兼容XP,Vista - 问题是JumpList仍然只包含带有相关文件扩展名的文件。

    我有两个问题:

    1. 将项目添加到跳转列表的更好方法是什么。
    2. 如何在浏览器列表中显示任何文件,无论文件扩展名如何?

1 个答案:

答案 0 :(得分:4)

来自MSDN

  

申请必须是注册的   处理项目的文件类型   该类型出现在其跳转列表中。   但是,它不需要是   该文件类型的默认处理程序

所以你必须自己添加注册你自己关注的每个文件类型,方法是向ProgId添加一个动词,或者只是将你的ProgId或exe名称添加到OpenWithProgIds或OpenWithList(HKCR \%。ext%\ OpenWithProgIds)

Windows需要这个的事实有点愚蠢,但是我猜他们需要知道当你点击跳转列表项时如何将文件路径传递给你的应用程序。

SHAddToRecentDocs的参数类型比你列出的要多,SHARDAPPIDINFOLINK的文档没有说明你是否需要在任何地方注册才能使它工作,所以你可以尝试而不是添加基本路径... < / p>