2012-09-25 27 views
0

在資源管理器中雙擊文件正確地將文件添加到我的應用程序的最近列表中,我可以從我的應用程序上的彈出式菜單再次打開它,開始菜單。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 \應用程序\ 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警告是這個沒有工作的原因。

的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); 
相關問題