2016-11-02 12 views
3

Windowsエクスプローラを使用して.docxや.jpgファイルのようなアイテムをクリックすると、その中でクリックしたアイテムのプレビューが表示されます。エクスプローラーlike this。私は私のWindowsフォームアプリケーション内でこれを複製しようとしていて、.docxと.xlsxファイルでうまく動作しますが、画像ファイルタイプではうまく動作しません。 私の理解では、プレビューハンドラは、filextension/ShellExのGUID {8895b1c6-b41f-4c1c-a562-0d564250836f}で登録されています。 regeditを使用すると、.docxファイルには.docx previewhandler GUIDが含まれていますが、.jpgのようなものを見ると何も見つかりません。 (i.stack.imgur.com/40v6h.png)。 (私は2つ以上のリンクを投稿することはできません)イメージタイプ(gif、bmp、jpgなど)のプレビューハンドラGUIDの検索

この投稿への最初の答えによると()stackoverflow.com/questions/39373357/how-to-get-the-icon-path-and-index -associated-with-a-file-type)、プレビューハンドラが.jpgのために格納される可能性のある他の場所がありますが、それらはすべて私のために空になります。

私の質問:ウィンドウが見つけることができるエクステンションタイプのプレビューハンドラを取得するにはどうすればできますか?できません。私はどこかに格納されているプレビューハンドラがあると思いますが、どこにいるか、どのようにそれらに到達するのか分かりません。

これは、ファイルのGUIDを取得するために使用するコードです。タイプ.docxと.xlsxでは成功ですが、イメージタイプではありません。私は最後のリンクに記載されているすべての場所を通過するが、それらはすべてnullになる。

private Guid GetPreviewHandlerGUID(string filename) 
    { 
     // open the registry key corresponding to the file extension 
     string extention = Path.GetExtension(filename); 
     RegistryKey ext = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64); 

     // open the key that indicates the GUID of the preview handler type 
     string className = Convert.ToString(ext.GetValue(null)); 
     RegistryKey test = ext.OpenSubKey(className + "\\ShellEx\\{8895b1c6-b41f-4c1c-a562-0d564250836f}"); 
     if (test != null) return new Guid(Convert.ToString(test.GetValue(null))); 
     // sometimes preview handlers are declared on key for the class 
     if (className != null) { 
       test = ext.OpenSubKey(extention + "\\ShellEx\\{8895b1c6-b41f-4c1c-a562-0d564250836f}"); 
      if (test == null) 
       test = ext.OpenSubKey("SystemFileAssociations\\" + className + "\\ShellEx\\{8895b1c6-b41f-4c1c-a562-0d564250836f}"); 
      if (test == null) 
       test = ext.OpenSubKey("SystemFileAssociations\\" + extention + "\\ShellEx\\{8895b1c6-b41f-4c1c-a562-0d564250836f}"); 
      if (test == null) 
       test = ext.OpenSubKey("SystemFileAssociations\\image\\ShellEx\\{8895b1c6-b41f-4c1c-a562-0d564250836f}"); 
      if (test != null) return new Guid(Convert.ToString(test.GetValue(null))); 
     } 

     return Guid.Empty; 
    } 

これは私の最初の投稿ですので、十分に情報があったと思います。不足しているものがある場合は、私がチャンスを取ったときにそれらを追加します。ありがとうございました。ローカルマシンの下だ

答えて

関連する問題