打开 solidworks当前文件 所在的文件夹 python pywin32
打开 solidworks当前文件 所在的文件夹 python pywin32
import os
import subprocess
import win32com.client
import pythoncom
from sw_server import get_sw_app, get_swmodeldef open_current_sw_document_folder():"""打开当前SolidWorks活动文档所在的文件夹"""try:# 获取SolidWorks应用程序实例sw_app = get_sw_app()if not sw_app:print("❌ 请先启动 SolidWorks")return False# 获取当前活动文档active_doc = sw_app.ActiveDocif active_doc is None:print("⚠️ 当前没有打开的文档")return False# 获取文档的完整路径doc_path = active_doc.GetPathNameif not doc_path or doc_path == "":print("⚠️ 当前文档未保存,无法确定文件位置")return False# 检查文件是否存在if not os.path.exists(doc_path):print(f"⚠️ 文件不存在: {doc_path}")return False# 打开文件所在的文件夹并选中该文件subprocess.run(['explorer', '/select,', doc_path], check=True)print(f"✅ 已在资源管理器中打开文件夹并选中文件: {os.path.basename(doc_path)}")return Trueexcept subprocess.CalledProcessError as e:print(f"❌ 无法打开文件夹: {e}")return Falseexcept Exception as e:print(f"❌ 操作失败: {e}")return Falsedef open_sw_part_folder(part_name, base_path=r"solidworksdata\一体式油水分离器"):"""打开指定SolidWorks零件文件所在的文件夹:param part_name: 零件名称(不包含扩展名):param base_path: 基础路径"""try:# 构建零件文件完整路径part_name = part_name.strip()part_file = f"{part_name}.sldprt"full_path = os.path.join(base_path, part_file)full_path = os.path.abspath(full_path)# 检查文件是否存在if not os.path.exists(full_path):print(f"⚠️ 零件文件不存在: {full_path}")return False# 打开文件夹并选中该文件subprocess.run(['explorer', '/select,', full_path], check=True)print(f"✅ 已在资源管理器中打开零件文件夹并选中: {part_file}")return Trueexcept subprocess.CalledProcessError as e:print(f"❌ 无法打开文件夹: {e}")return Falseexcept Exception as e:print(f"❌ 操作失败: {e}")return False# 使用示例(可选添加到 __main__ 部分)
if __name__ == "__main__":# 打开当前SolidWorks文档所在的文件夹open_current_sw_document_folder()
import win32com.client
import pythoncomarg_Nothing = win32com.client.VARIANT(pythoncom.VT_DISPATCH, None)
def get_solidworks_instance():"""尝试连接到一个已经运行的SolidWorks实例,如果没有找到,则启动一个新的实例。"""try:# 尝试连接到现有的SolidWorks应用程序swApp = win32com.client.Dispatch("SldWorks.Application")except pythoncom.com_error:print("未找到正在运行的SolidWorks实例,正在启动新实例...")# 如果没有找到,则创建一个新的实例swApp = win32com.client.gencache.EnsureDispatch("SldWorks.Application")return swApp# 获取SolidWorks应用程序对象
swApp = get_solidworks_instance()# 激活SolidWorks窗口(可选)
swApp.Visible = True# 检查是否有已打开的文档,如果没有,则创建新零件文档
if swApp.ActiveDoc is None:# 路径需要根据你的SolidWorks安装版本和模板位置调整part = swApp.NewDocument(r"C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2025\templates", 0, 0, 0)
else:print("已有文档处于打开状态,使用现有文档进行操作或关闭当前文档后重试。")# 接下来的代码可以继续按照之前的逻辑来创建立方体...
swModel = swApp.ActiveDoc
# 创建草图并绘制矩形
import win32com.client
import pythoncomdef get_sw_app():"""获取或启动 SolidWorks 实例"""try:swApp = win32com.client.GetActiveObject("SldWorks.Application")print("连接到已运行的 SolidWorks。")except:print("未检测到 SolidWorks,正在启动...")swApp = win32com.client.Dispatch("SldWorks.Application")swApp.Visible = Truereturn swAppdef get_swmodel():# 获取 SolidWorks 实例swApp = get_sw_app()# 创建新零件(如果无活动文档)if swApp.ActiveDoc is None:# 使用默认零件模板(路径可能因版本而异)# 建议使用空模板或确保路径正确# 获取默认零件模板swModel = swApp.NewDocument(r"C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2025\templates\gb_part.prtdot", 0, 0, 0)else:swModel = swApp.ActiveDoc# 强制类型转换为 PartDocswPart = swModelreturn swPart, swModel