Почему в списке переходов Windows 7 отображаются только файлы с моим расширением? - PullRequest
3 голосов
/ 28 марта 2011

Я пытаюсь правильно интегрировать наше приложение с Windows 7 Jump Lists.Мы разрешаем открывать файлы в приложении, и я добавил это некоторое время назад, чтобы добавить элементы в список переходов:

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

, где JumpList из WindowsAPICodePack

Было два вопроса с этим подходом.

  1. Иногда пользователи получают исключение ComException при вызове Refresh () (невозможно удалить файл, подлежащий замене. (Исключение из HRESULT: 0x80070497)).
  2. JumpList будет толькосодержат файлы с расширением приложения.

Мы разрешаем импортировать другие файлы в нашем приложении с помощью метода Open, и я хочу, чтобы эти файлы также отображались в списке переходов, но они не отображаются.

Я искал вопросы относительно списков переходов здесь на SO и нашел другой способ добавить недавно использованные файлы в этот ответ :

    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 Ответ

4 голосов
/ 28 марта 2011

С MSDN :

Заявка должна быть зарегистрирована обработчик для типа файла для элемента этот тип появится в его списке переходов. Это, однако, не должно быть обработчик по умолчанию для этого типа файла

Таким образом, вы должны добавить себя к каждому типу файла, который вас интересует, либо добавив глагол в ProgId, либо, возможно, просто добавив свой ProgId или имя exe в OpenWithProgIds или OpenWithList (HKCR \%. Ext% \ OpenWithProgIds)

Тот факт, что Windows требует этого, является немного глупым ИМХО, но я предполагаю, что они должны знать, как передать путь к файлу в ваше приложение, когда вы нажимаете на элемент списка перехода.

SHAddToRecentDocs имеет больше типов параметров, чем вы перечислили, документы для SHARDAPPIDINFOLINK не говорят, нужно ли вам где-нибудь зарегистрироваться, чтобы это работало, поэтому вы можете попробовать это вместо добавления основного пути .. .

...