最近、一部のネチズンは、エクスプローラーに表示される画像に似たプレビュー画像をインターフェイスに表示する方法を尋ねました。
今日はみんなで見つけてみようと思います。まず、共有した中国語訳「プレビュー」で検索すると、
便利なものがいくつか見つかりました。
これを最初に見てください。最初の列はWebヘルプのアドレスです。もちろん、ローカルAPIヘルプでも確認できます。
vbaには別の例があります。
問題は、exeが十分でないため、このヘルプはプロセスでのみ使用できることです。
以下を見て続けて、別の方法がある。
この方法は、説明に従って使用しているように見える:
。文書の指定されたプレビュービットマップを取得し、指定したファイル名を使用してWindowsビットマップファイル(.BMP)として保存
書きますコード:
ISldWorks swApp = Utility.ConnectToSolidWorks();
//此处路径请自己确保存在。
string fileName = @"D:\09_Study\CSharpAndSolidWorks\CSharpAndSolidWorks\TemplateModel\bodies.sldasm";
string configName = "Default";
string bitmapPathName = @"D:\09_Study\CSharpAndSolidWorks\CSharpAndSolidWorks\TemplateModel\bodies.bmp";
var status = swApp.GetPreviewBitmapFile(fileName, configName, bitmapPathName);
if (System.IO.File.Exists(bitmapPathName))
{
swApp.SendMsgToUser("预览图获取完成。");
}
結果の色は少し奇妙で理想的ではありません。
ここで検討した後、Solidworksを使用して処理しなくても、システムリソースマネージャーのプレビューを直接取得できます。
これは直接Baiduです。リソースを探してください。
クラスを見つけて直接呼び出してファイルを取得しました。サフィックスは.liで、これは非常に奇妙な形式です。
ファイルを見つけて、現在のパーツフォルダにコピーします。サフィックスを.bmpに変更します。
これは、システムのAPIを使用して取得されます。単一の構成パーツのみである場合に最適です。これは、異なる構成のプレビューを取得できないようです。
APIヘルプを照会すると、プレビュー画像を取得する機能もDocument ManagerAPIで提供されていることがわかりました。
ここではキーが必要です。本物のユーザーの場合は、対応するエージェントを見つけて入手してください。バージョンごとにキーが異なり、会社名が含まれています。
まだ例がありますので、試してみましょう。
テスト中に、documentmgrは2018年以降64ビットプログラムのみをサポートしていることがわかりました。したがって、テストするときは、コンパイラオプションをx64ビットに変更する必要があります。そうしないと、dllインスタンスを作成できないことが常に報告されます。
const string sLicenseKey = "your_license_key"; //这个不好公开。请下载代码
string sDocFileName = fileName;
SwDMClassFactory swClassFact = default(SwDMClassFactory);
SwDMApplication swDocMgr = default(SwDMApplication);
SwDMDocument swDoc = default(SwDMDocument);
SwDMDocument10 swDoc10 = default(SwDMDocument10);
SwDmDocumentType nDocType = 0;
SwDmDocumentOpenError nRetVal = 0;
SwDmPreviewError nError = 0;
// Determine type of SOLIDWORKS file based on file extension
if (sDocFileName.EndsWith("sldprt"))
{
nDocType = SwDmDocumentType.swDmDocumentPart;
}
else if (sDocFileName.EndsWith("sldasm"))
{
nDocType = SwDmDocumentType.swDmDocumentAssembly;
}
else if (sDocFileName.EndsWith("slddrw"))
{
nDocType = SwDmDocumentType.swDmDocumentDrawing;
}
else
{
// Probably not a SOLIDWORKS file,
// so cannot open
nDocType = SwDmDocumentType.swDmDocumentUnknown;
return;
}
swClassFact = new SwDMClassFactory();
swDocMgr = (SwDMApplication)swClassFact.GetApplication(sLicenseKey);
swDoc = (SwDMDocument)swDocMgr.GetDocument(sDocFileName, nDocType, true, out nRetVal);
Debug.Print("File = " + swDoc.FullName);
Debug.Print(" Version = " + swDoc.GetVersion());
Debug.Print(" Author = " + swDoc.Author);
Debug.Print(" Comments = " + swDoc.Comments);
Debug.Print(" CreationDate = " + swDoc.CreationDate);
Debug.Print(" Keywords = " + swDoc.Keywords);
Debug.Print(" LastSavedBy = " + swDoc.LastSavedBy);
Debug.Print(" LastSavedDate = " + swDoc.LastSavedDate);
Debug.Print(" Subject = " + swDoc.Subject);
Debug.Print(" Title = " + swDoc.Title);
swDoc10 = (SwDMDocument10)swDoc;
// SwDMDocument10::GetPreviewBitmap throws an unmanaged COM exception
// for out-of-process C# console applications
// Use the following code in SOLIDWORKS C# macros and add-ins
object objBitMap = swDoc10.GetPreviewBitmap(out nError);
System.Drawing.Image imgPreview = PictureDispConverter.Convert(objBitMap);
imgPreview.Save(bitmapPathName, System.Drawing.Imaging.ImageFormat.Bmp);
imgPreview.Dispose();
Debug.Print(" Preview stream = " + swDoc10.PreviewStreamName);
実行が成功すると、間違った色のプレビュー画像が正常に置き換えられます。
もちろん、それはまだ最後に保存された構成のサムネイルにすぎません。
他の構成を取得するにはどうすればよいですか?
このメソッドの注釈に説明があります。他のメソッドが必要です。
例があります:
構成例のPNGプレビュービットマップとストリームを取得する(C#)
コアはここにあり、構成をトラバースする必要があります。もちろん、構成名がわかっている場合は、一度トラバースする必要はありません。
私は次のコードをテストしていません
swCfgMgr = swDoc.ConfigurationManager;
Debug.Print("File = " + swDoc.FullName);
Debug.Print("Active configuration name = " + swCfgMgr.GetActiveConfigurationName());
vCfgNameArr = (string[])swCfgMgr.GetConfigurationNames();
foreach (string vCfgName in vCfgNameArr)
{
swCfg = (SwDMConfiguration7)swCfgMgr.GetConfigurationByName(vCfgName);
// SwDMConfiguration7::GetPreviewPNGBitmap throws an unmanaged COM exception
// for out-of-process C# console applications
// Use the following code in SOLIDWORKS C# macros and add-ins
object objBitMap = swCfg.GetPreviewPNGBitmap(out nError);
System.Drawing.Image imgPreview = PictureDispConverter.Convert(objBitMap);
imgPreview.Save("C:\\temp\\" + vCfgName + ".PNG", System.Drawing.Imaging.ImageFormat.Png);
imgPreview.Dispose();
Debug.Print(" " + vCfgName);
Debug.Print(" PNG preview stream = " + swCfg.PreviewPNGStreamName);
Debug.Print(" ");
}