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 の下には他のキーはありません。

先ほど言ったように、Explorer でアプリケーションをダブルクリックしてアプリケーションを開くことができます。アプリケーションは最近使用したドキュメントに追加され、すべて問題なく表示されます。ポップアップから問題なく開くことができます。

正しいパスを取得する私の 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 に答える