gpt4 book ai didi

c# - 为什么 Windows 7 跳转列表中只显示带有我的文件扩展名的文件?

转载 作者:行者123 更新时间:2023-11-30 15:45:10 24 4
gpt4 key购买 nike

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

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

其中 JumpList 来自 WindowsAPICodePack

这种方法有两个问题。

  1. 偶尔,用户会在调用 Refresh() 时遇到 ComException(无法删除要替换的文件。(HRESULT 异常:0x80070497))。
  2. JumpList 将仅包含具有应用程序文件扩展名的文件。

我们允许通过 Open 方法在我们的应用程序中导入其他文件,我希望这些文件也显示在跳转列表中,但它们没有。

我在 SO 上搜索了有关 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. 无论文件扩展名如何,如何让任何文件显示在我的跳转列表中?

最佳答案

来自 MSDN :

An application must be a registered handler for a file type for an item of that type to appear in its Jump List. It does not, however, need to be the default handler for that file type

因此,您必须通过向 ProgId 添加动词或可能只是将您的 ProgId 或 exe 名称添加到 OpenWithProgIds 或 OpenWithList (HKCR\%.ext%\OpenWithProgIds) 来为您关心的每个文件类型添加注册

Windows 要求这样做有点愚蠢恕我直言,但我猜他们需要知道如何在您单击跳转列表项时将文件路径传递给您的应用。

SHAddToRecentDocs 的参数类型比您列出的要多,SHARDAPPIDINFOLINK 的文档没有说明您是否需要在任何地方注册才能正常工作,因此您可以尝试这样做而不是添加基本路径...

关于c# - 为什么 Windows 7 跳转列表中只显示带有我的文件扩展名的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5453545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com