使用API事件处理程序捕获SOLIDWORKS命令的VBA宏
该宏允许捕获SOLIDWORKS命令ID(例如工具栏、页面按钮或上下文菜单的点击)。命令在swCommands_e枚举中定义,并可以使用SOLIDWORKS API中的ISldWorks::RunCommand方法调用。
当SDK中不可用某些SOLIDWORKS API时,这可能特别有用。
所有命令都有用户友好的名称,但它们不一定与用户界面中的名称匹配。这个事实可能会使查找正确的命令变得困难(因为当前有超过3000个可用命令)。例如,用户界面中的隐藏草图命令对应于swCommands_Blank_Refgeom命令ID。
捕获标准命令
该宏帮助直接从SOLIDWORKS中捕获命令的ID,只需点击所需的命令即可。
- 运行宏。显示带有列表的窗体。
- 执行所需的操作(例如点击按钮或菜单项)。
- 命令ID将被记录并显示在列表中。
{ width=350 }
可以在命令列表中查找命令ID。
{ width=350 }
不需要显式使用swCommands_e枚举,因为它在另一个互操作(solidworks.interop.swcommands.dll)中定义。相反,命令ID可以定义为整数或自定义枚举。
从自定义加载项捕获命令
对于标准SOLIDWORKS命令,User Command参数将等于0。但是,无法为任何自定义加载项或宏按钮定义命令。
如果点击了此命令,则命令ID将等于以下之一:
{ width=450 }
Command将指示按钮的类型(最小化工具栏、菜单、宏按钮等),而User Command Id将等于自定义按钮的用户ID。这是一个命令用户ID,可以通过在SOLIDWORKS加载项中创建自定义命令管理器时使用ICommandGroup::CommandId属性检索。
{ width=250 }
创建宏
- 将用户窗体模块添加到宏中,并将其命名为CommandsMonitorForm。
{ width=450 }
- 将列表框控件拖放到窗体上,并将其命名为lstLog。
{ width=450 }
- 将代码添加到相应的模块中。
宏
Sub main()
CommandsMonitorForm.Show vbModeless
End Sub
CommandsMonitorForm
Dim WithEvents swApp As SldWorks.SldWorks
Private Sub UserForm_Initialize()
Set swApp = Application.SldWorks
End Sub
Private Function swApp_CommandOpenPreNotify(ByVal Command As Long, ByVal UserCommand As Long) As Long
lstLog.AddItem "Command: " & Command & "; User Command:" & UserCommand
End Function