2012-09-25 1 views
0

Double-cliquer sur un fichier dans Explorer ajoute correctement le fichier à la liste récente de mon application et je peux l'ouvrir à nouveau depuis le menu contextuel de mon application que j'ai épinglé sur le le menu Démarrer.SHAddToRecentDocs n'ajoute pas mon fichier aux documents récents

J'ai un gestionnaire de fichiers spécial dans l'application, donc j'utilise SHAddToRecentDocs pour ajouter les projets ouverts dans l'application aux fichiers récents. Mais cela n'arrive tout simplement pas et je ne peux pas trouver quel est le problème.

Voici ce que je suis arrivé dans le Registre:

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 

Il n'y a pas d'autres clés sous HKCR \ Applications \ MyApp.exe.

Comme je l'ai dit, je peux ouvrir des applications en double-cliquant sur eux dans l'Explorateur, ils sont ajoutés aux documents récents et tout a l'air bien. Je peux les ouvrir à partir du menu contextuel.

Mon appel SHAddToRecentDocs, qui obtient un chemin correct, ne semble rien faire du tout. Aucun lien n'apparaît dans le dossier des documents récents.

est ici le code C# Je l'utilise pour exécuter 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); 
} 

Répondre

1

Si avéré qu'un correctif à un avertissement de code FxCop était la raison pour laquelle cela ne fonctionne pas.

L'API ShellAddToRecentDocsFlags a été défini comme suit:

[DllImport("Shell32.dll", CharSet = CharSet.Unicode)] 
static extern void SHAddToRecentDocs(ShellAddToRecentDocsFlags flags, string file); 

Changement à la fixe la question suivante:

[DllImport("Shell32.dll", BestFitMapping = false, ThrowOnUnmappableChar = true)] 
static extern void SHAddToRecentDocs(ShellAddToRecentDocsFlags flags, [MarshalAs(UnmanagedType.LPStr)]string file); 
Questions connexes