2012-09-25 2 views
0

Explorer에서 파일을 두 번 클릭하면 파일이 내 응용 프로그램의 최신 목록에 올바르게 추가되고 해당 프로그램에 고정되어있는 응용 프로그램의 팝업 메뉴에서 파일을 다시 열 수 있습니다. 메뉴를 시작하다.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 

는 \ MyApp.exe의 HKCR \ 응용 프로그램에서 다른 키가 없습니다.

내가 말했듯이, 나는 익스플로러에서 두 번 클릭하여 애플리케이션을 열 수 있으며, 최근 문서에 추가되고 모든 것이 잘 보입니다. 나는 벌금 팝업에서 그들을 열 수 있습니다.

정확한 경로를 얻는 My 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 코드 경고에 대한 수정이 작동하지 않은 이유는 것을 밝혀졌다 경우

는 여기에 내가 SHAddToRecentDocs를 실행하는 데 사용하는 C# 코드입니다.

[DllImport("Shell32.dll", BestFitMapping = false, ThrowOnUnmappableChar = true)] 
static extern void SHAddToRecentDocs(ShellAddToRecentDocsFlags flags, [MarshalAs(UnmanagedType.LPStr)]string file); 
다음 고정 문제로 변경

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

다음과 같이

ShellAddToRecentDocsFlags의 API가 정의

관련 문제