SHAddToRecentDocs не добавляет мой файл в последние документы
Двойной щелчок по файлу в Проводнике правильно добавляет файл в последний список для моего приложения, и я могу открыть его снова из всплывающего меню своего приложения, которое я закрепил в меню "Пуск".
У меня есть специальный файловый менеджер в приложении, поэтому я использую SHAddToRecentDocs для добавления проектов, открытых в приложении, к последним файлам. Но этого просто не происходит, и я не могу найти, в чем проблема.
Вот что я получил в реестре:
HKEY_CLASSES_ROOT\.abc\Content Type = application/MyApp
HKEY_CLASSES_ROOT\.abc\(Standard) = MyAppProjectFile
HKEY_CLASSES_ROOT\MyAppProjectFile\shell\open\command\(Standard) = "C:\MyApp\MyApp.exe" %1
HKEY_CLASSES_ROOT\Applications\MyApp.exe\shell\open\command\(Standard) = "C:\MyApp\MyApp.exe" %1
Других ключей в папке HKCR\Applications\MyApp.exe нет.
Как я уже сказал, я могу открыть приложения, дважды щелкнув по ним в Проводнике, они добавляются в последние документы, и все выглядит хорошо. Я могу открыть их из всплывающего окна штрафа.
Мой вызов SHAddToRecentDocs, который получает правильный путь, похоже, ничего не делает. В папке недавних документов нет ссылки.
Вот код C#, который я использую для запуска SHAddToRecentDocs:
[DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
static extern void SHAddToRecentDocs(ShellAddToRecentDocsFlags flags, string file);
[Flags]
public enum ShellAddToRecentDocsFlags
{
Pidl = 0x001,
Path = 0x002,
}
/// <summary>
/// Adds the file to recent files list in windows.
/// </summary>
/// <param name="fullPath"> Name of the file. </param>
public static void AddFileToRecentFilesList(string fullPath)
{
SHAddToRecentDocs(ShellAddToRecentDocsFlags.Path, fullPath);
}
1 ответ
Если выяснилось, что исправление к коду предупреждения FxCop было причиной, по которой это не сработало.
API ShellAddToRecentDocsFlags был определен следующим образом:
[DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
static extern void SHAddToRecentDocs(ShellAddToRecentDocsFlags flags, string file);
Изменение на следующее исправило проблему:
[DllImport("Shell32.dll", BestFitMapping = false, ThrowOnUnmappableChar = true)]
static extern void SHAddToRecentDocs(ShellAddToRecentDocsFlags flags, [MarshalAs(UnmanagedType.LPStr)]string file);