我正在尝试将我们的应用程序与 Windows 7 跳转列表正确集成。我们允许在应用程序中打开文件,我不久前添加了这个以将项目添加到跳转列表中:
var list = JumpList.CreateJumpList()
list.AddToRecent(file);
list.Refresh();
其中 JumpList 来自WindowsAPICodePack
这种方法有两个问题。
- 有时,用户会在 Refresh() 调用上收到 ComException(无法删除要替换的文件。(来自 HRESULT 的异常:0x80070497))。
- JumpList 将仅包含具有应用程序文件扩展名的文件。
我们允许通过 Open 方法在我们的应用程序中导入其他文件,我希望这些文件也显示在跳转列表中,但它们没有。
我在 SO 上搜索了有关 JumpLists 的问题,并找到了一种在此答案中添加最近使用的文件的不同方法:
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 仍然只包含具有我关联文件扩展名的文件。
我有两个问题:
- 将项目添加到跳转列表的更好方法是什么。
- 无论文件扩展名如何,如何让任何文件显示在我的跳转列表中?