0

双击资源管理器中的文件正确地将文件添加到我的应用程序的最近列表中,我可以从我固定在开始菜单上的应用程序的弹出菜单中再次打开它。

我在应用程序中有一个特殊的文件管理器,所以我使用 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 调用获得了正确的路径,似乎根本没有做任何事情。最近的文档文件夹中不显示任何链接。

这是我用来运行 SHAddToRecentDocs 的 C# 代码:

[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);
}
4

1 回答 1

1

如果结果是对 FxCop 代码警告的修复是这不起作用的原因。

ShellAddToRecentDocsFlags API 定义如下:

[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);
于 2012-09-26T09:28:27.913 回答