2012-08-09 18 views
7

पर सॉलिडवर्क्स समेत किसी भी फ़ाइल का थंबनेल प्राप्त करें प्रत्येक स्थापित ओएस के अंदर थंबनेलप्रोवाइडर्स में बहुत सारे बिल्ड-इन हैं। इन प्रदाताओं के कारण विंडोज कई फाइलों के थंबनेल को दिखाने में सक्षम है। उदाहरण के लिए विंडोज एक्सप्लोरर * .jpg फ़ाइलों की सामग्री दिखा सकता है, लेकिन सॉलिडवर्क्स * .sldprt फ़ाइलों से भी (यदि सॉलिडवर्क्स स्थापित है)।विंडोज एक्सपी/विस्टा

लेकिन क्या इन थंबनेल प्राप्त करने का कोई तरीका है? मैं Windows API CodecPack का उपयोग कर इस का प्रबंधन करने की कोशिश की, लेकिन मैं केवल Windows पर सफल 7.

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

प्रश्न है: Windows XP पर पंजीकृत थंबनेल प्रदाता के साथ किसी भी फ़ाइल के थंबनेल प्राप्त करने के लिए किसी भी अन्य उपयोगी तरीका है/विस्टा? मैं वास्तव में निराश ...

उत्तर

-1

आप अप्रबंधित खिड़कियां खोल तरीकों का उपयोग थंबनेल

Here is the code (not a small one)

लेकिन परिणाम सही से दूर हैं पाने के लिए कर सकते हैं।

  • डिबगिंग बहुत कठिन है, अनिर्दिष्ट आम हैं
  • वहाँ लक्षित मशीन पर विशिष्ट फ़ाइल पाठक availible हो गया है (pdfs के लिए उदाहरण के लिए पीडीएफ रीडर, यह SolidWorks पर की कोशिश की नहीं था)
  • काम कर सकते हैं केवल Windows में
  • प्रदर्शन मुद्दा
  • थंबनेल कम गुणवत्ता
5

ऐसे कई तरीके हैं (पीडीएफ के साथ इसे करने की कोशिश):

1) पुस्तकालय OpenMCDF के साथ। सॉलिडवर्क्स फ़ाइल 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 को नियंत्रण के रूप में जोड़ा जाना और फ़ॉर्म में रखा जाना चाहिए।

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

3) 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) पुस्तकालय दस्तावेज़ प्रबंधक (SolidWorks.Interop.swdocumentmgr के साथ) के साथ

  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 उदाहरण काम नहीं करता। एक "पूर्वावलोकन" तत्व है लेकिन नेट मुझे बताता है कि यह एक छवि नहीं है ??? – jimconstable

+0

मैंने ठोस कार्य के उदाहरण की ओर इशारा किया, इसलिए काम करना चाहिए। यदि आपको ठोस कार्य फ़ाइल के लिए एक तस्वीर मिलती है, तो सदस्य का नाम "पूर्वावलोकन" होना चाहिए, न कि "पूर्वावलोकन"। – streamdown

+0

ओपनएमसीडीएफ का प्रयास किया, काम नहीं किया। फिर swdocumentmgr कोशिश की। Stdole और microsoft.visualbasic.compatibility dlls खोजने में कठिन समय होने के बाद, यह भी काम नहीं करता था। यह "GetPreviewPNGBitmap" पर असफल रहा है, जिसमें कहा गया है कि कक्षा में उपयोग लाइसेंस नहीं है। – AXMIM