2012-08-09 10 views
7

インストールされているすべてのOSには、たくさんのThumbnailProvidersが組み込まれています。これらのプロバイダのおかげで、Windowsは多くのファイルのサムネイルを表示することができます。たとえば、Windowsエクスプローラでは* .jpgファイルの内容を表示できますが、SolidWorks * .sldprtファイルからも表示できます(SolidWorksがインストールされている場合)。Windows XP/Vista上のSolidWorksを含むファイルのサムネイルを取得

しかし、サムネイルを取得する方法はありますか? I'veは、Windows API CodecPackを使用してこれを管理しようとしたが、私はWindows上でのみ成功した7

ShellFile shellFile = ShellFile.FromFilePath(filePath);     
Bitmap shellThumb = shellFile.Thumbnail.Bitmap; 

質問です:のWindows XP上の登録サムネールプロバイダとの任意のファイルのサムネイルを取得するために、他の使用可能な方法があります/ Vista?本当に絶望的 - 私...

答えて

-1

あなたがサムネイル

Here is the code (not a small one)

しかし、結果は完璧にはほど遠いですに取得するために管理されていないWindowsシェルの方法を使用することができます。

  • デバッグが動作することができます
  • がターゲットマシン上でフィットネスエクササイズの特定のファイルリーダーである必要があります(pdfファイル用などのPDFリーダー、SolidWorksの上でそれを試していなかった)共通
  • あり、非常に難しい不明なエラーですWindowsのみ
  • パフォーマンスの問題
  • サムネイル低品質(PDFファイルでそれを試してみました)
5

いくつかの方法があります。

1)ライブラリOpenMCDFである。 SolidWorksファイルはCompound documentなので、そのコンテンツへのアクセスはファイルの解析です。

OpenFileDialog dialog = new OpenFileDialog();  
dialog.InitialDirectory = Application.StartupPath; 
if (dialog.ShowDialog() == DialogResult.OK) 
{ 
    string STORAGE_NAME = dialog.FileName.ToString(); 
    CompoundFile cf = new CompoundFile(STORAGE_NAME); 
    CFStream st = cf.RootStorage.GetStream("PreviewPNG"); 
    byte[] buffer = st.GetData(); 
    var ms = new MemoryStream(buffer.ToArray()); 
    pictureBox1.Image = Image.FromStream(ms); 
    } 

2)ライブラリとしてEModelView.dllをコントロールとして追加し、フォームに配置します。ライブラリドキュメントマネージャー(SolidWorks.Interop.swdocumentmgrでSWExplorerライブラリ(wpfPreviewFlowControl)

 OpenFileDialog dialog = new OpenFileDialog(); 
     if (dialog.ShowDialog() == DialogResult.OK) 
     { 
      string sDocFileName = dialog.FileName.ToString(); 
      wpfThumbnailCreator pvf; 
      pvf = new wpfThumbnailCreator(); 
      System.Drawing.Size size = new Size(); 
      size.Width = 200; 
      size.Height = 200; 
      pvf.DesiredSize = size; 
      System.Drawing.Bitmap pic = pvf.GetThumbNail(sDocFileName); 
      pictureBox1.Image = pic; 
     } 

3))で

OpenFileDialog dialog = new OpenFileDialog(); 
     if (dialog.ShowDialog() == DialogResult.OK) 
     { 
      axEModelViewControl1.OpenDoc(dialog.FileName.ToString(), false, false, true, ""); 
     } 

3)

  OpenFileDialog dialog = new OpenFileDialog(); 
     if (dialog.ShowDialog() == DialogResult.OK) 
     { 
      string sDocFileName = dialog.FileName.ToString(); 
      SwDMClassFactory swClassFact = default(SwDMClassFactory); 
      SwDMApplication swDocMgr = default(SwDMApplication); 
      SwDMDocument swDoc = default(SwDMDocument); 
      SwDMConfigurationMgr swCfgMgr = default(SwDMConfigurationMgr); 
      string[] vCfgNameArr = null; 
      SwDMConfiguration7 swCfg = default(SwDMConfiguration7); 
      IPictureDisp pPreview = default(IPictureDisp); 
      SwDmDocumentType nDocType = 0; 
      SwDmDocumentOpenError nRetVal = 0; 
      SwDmPreviewError nRetVal2 = 0; 
      Image image = default(Image); 

      //Access to interface 
      swClassFact = new SwDMClassFactory(); 
      swDocMgr = (SwDMApplication)swClassFact.GetApplication("Post your code here"); 
      swDoc = (SwDMDocument)swDocMgr.GetDocument(sDocFileName, nDocType, false, out nRetVal); 
      Debug.Assert(SwDmDocumentOpenError.swDmDocumentOpenErrorNone == nRetVal); 
      swCfgMgr = swDoc.ConfigurationManager; 

      pathLabel.Text = "Path to file: " + swDoc.FullName; 
      configLabel.Text = "Active config: " + swCfgMgr.GetActiveConfigurationName(); 
      vCfgNameArr = (string[])swCfgMgr.GetConfigurationNames(); 

      foreach (string vCfgName in vCfgNameArr) 
      { 
       //get preview 
       swCfg = (SwDMConfiguration7)swCfgMgr.GetConfigurationByName(vCfgName); 
       pPreview = (IPictureDisp)swCfg.GetPreviewPNGBitmap(out nRetVal2); 
       image = Support.IPictureDispToImage(pPreview); 
       //insert to picturebox 
       pictureBox1.BackgroundImage = image; 
      } 
      swDoc.CloseDoc(); 
     } 
+0

openMCDFの例は動作しません。 "プレビュー"要素がありますが、.netは画像ではないことを教えていますか? – jimconstable

+0

私はソリッドワークスの例を指摘したので、うまくいくはずです。 solidworksファイルの画像を取得した場合、メンバー名は「PreviewPNG」でなく「Preview」でなければなりません。 – streamdown

+0

試したopenMCDFはうまくいかなかった。その後、swdocumentmgrを試してみました。 stdoleとmicrosoft.visualbasic.compatibility dllを見つけるのが苦労した後、うまくいきませんでした。 "GetPreviewPNGBitmap"でクラスに使用ライセンスがないと言っても失敗します。 – AXMIM

関連する問題