Я пытаюсь правильно интегрировать наше приложение с Windows 7 Jump Lists.Мы разрешаем открывать файлы в приложении, и я добавил это некоторое время назад, чтобы добавить элементы в список переходов:
var list = JumpList.CreateJumpList()
list.AddToRecent(file);
list.Refresh();
, где JumpList из WindowsAPICodePack
Было два вопроса с этим подходом.
- Иногда пользователи получают исключение ComException при вызове Refresh () (невозможно удалить файл, подлежащий замене. (Исключение из HRESULT: 0x80070497)).
- 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 по-прежнему содержит только файлы с моим расширением.
У меня есть два вопроса:
- Какой лучший способ добавитьэлементов в список переходов.
- Как получить файл, отображаемый в моем списке переходов, независимо от расширения файла?