原理:取得按钮名称以后,通过运行宏文件激活按钮
Imports System.IO Imports System.Runtime.InteropServices Imports NXOpen.MenuBar <DllImport("libugui", EntryPoint:="?MACRO_playback_from_usertool@@YAXPEBD@Z", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi)> _ Private Sub MACRO_playback_from_usertool(ByVal lpName As String) End Sub <DllImport("libugui", EntryPoint:="?MACRO_playback_from_usertool@@YAXPBD@Z", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi)> _ Private Sub MACRO_playback_from_usertoolA(ByVal lpName As String) '32位用法 End Sub ''' <summary> ''' 执行宏文件. ''' </summary> ''' <param name="macroFile">指定宏文件路径</param> ''' <returns><c>true</c> 运行成功, <c>false</c> 否则.</returns> Public Function ExecuteMacro(ByVal macroFile As String) As Boolean Dim response As Boolean = False Try If File.Exists(macroFile) Then If IntPtr.Size = 8 Then MACRO_playback_from_usertool(macroFile) Else MACRO_playback_from_usertoolA(macroFile) End If response = True End If Catch ex As Exception End Try Return response End Function ''' <summary> ''' 激活NX窗口按钮 ''' </summary> ''' <param name="menuBtn">指定需要激活的按钮,必须是PushButton或者ApplicationButton</param> ''' <returns>激活成功,返回<c>true</c>,否则返回<c>false</c>。</returns> ''' <remarks> ''' 最低版本NX6.0.0,<br/> ''' 许可证要求: None. ''' </remarks> ''' <example> ''' <code src="src" language="VB.NET" encoding="c"/> ''' Dim menuBtn As NXOpen.MenuBar.MenuButton<br/> ''' menuBtn= NXOpen.UI.GetUI.MenuBarManager.GetButtonFromName("UG_MODELING_BLOCK_FEATURE")<br/> ''' menuBtn.ActiveMenuButton()<br/> ''' <code src="src" language="C#" encoding="c"/> ''' NXOpen.MenuBar.MenuButton menuBtn<br/> ''' menuBtn= NXOpen.UI.GetUI.MenuBarManager.GetButtonFromName("UG_MODELING_BLOCK_FEATURE");<br/> ''' menuBtn.ActiveMenuButton();<br/> ''' </example> Public Function ActiveMenuButton(ByVal menuBtn As MenuButton) As Boolean Dim response As Boolean = False Try If menuBtn Is Nothing Then Exit Try End If Dim menuType = menuBtn.ButtonType If menuType <> MenuButton.Type.PushButton OrElse menuType = MenuButton.Type.ApplicationButton Then Exit Try End If Dim macroFile As String = Path.GetDirectoryName(My.Application.GetType.Assembly.Location) & "\actionBtn.macro" If File.Exists(macroFile) Then File.Delete(macroFile) End If Dim sw As New StreamWriter(macroFile) sw.WriteLine("NX 6.0.0") sw.WriteLine("Macro File: " & macroFile) sw.WriteLine("Macro Version 7.30") sw.WriteLine("Macro List Language and Codeset: simplified chine 13") sw.WriteLine("Created by Administrator on Fri Aug 21 18:28:49 2015") sw.WriteLine("Part Name Display Style: $FILENAME") sw.WriteLine("Selection Parameters 1 2 0.305380 1") sw.WriteLine("Display Parameters 1.000000 19.601460 14.127756 -1.000000 -0.720750 1.000000 0.720750") sw.WriteLine("*****************") sw.WriteLine("RESET") sw.WriteLine(String.Format("MENU, 0, {0} UG_GATEWAY_MAIN_MENUBAR ! ", menuBtn.ButtonName)) sw.Close() If ExecuteMacro(macroFile) Then response = True End If File.Delete(macroFile) Catch ex As Exception End Try Return response End Function ''' <summary> ''' 激活NX窗口按钮toggle按钮. ''' </summary> ''' <param name="menuBtn">ToggleButton.</param> ''' <param name="ToggleStatus">切换状态</param> ''' <returns>激活成功,返回<c>true</c>,否则返回<c>false</c>。</returns> ''' <remarks> ''' 最低版本NX6.0.0,<br/> ''' 许可证要求: None. ''' </remarks> ''' <example> ''' <code src="src" language="VB.NET" encoding="c"/> ''' Dim menuBtn As NXOpen.MenuBar.MenuButton<br/> ''' menuBtn= NXOpen.UI.GetUI.MenuBarManager.GetButtonFromName("UG_WCS_DISPLAY")<br/> ''' menuBtn.ActiveToggleButton()<br/> ''' <code src="src" language="C#" encoding="c"/> ''' NXOpen.MenuBar.MenuButton menuBtn<br/> ''' menuBtn= NXOpen.UI.GetUI.MenuBarManager.GetButtonFromName("UG_WCS_DISPLAY");<br/> ''' menuBtn.ActiveToggleButton();<br/> ''' </example> Public Function ActiveToggleButton(ByVal menuBtn As MenuButton, ByVal ToggleStatus As MenuButton.Toggle) As Boolean Dim response As Boolean = False Try If menuBtn Is Nothing Then Exit Try End If If menuBtn.ButtonType <> MenuButton.Type.ToggleButton Then Exit Try End If If menuBtn.ToggleStatus = ToggleStatus Then Exit Try End If Dim macroFile As String = Path.GetDirectoryName(My.Application.GetType.Assembly.Location) & "\actionBtn.macro" If File.Exists(macroFile) Then File.Delete(macroFile) End If Dim sw As New StreamWriter(macroFile) sw.WriteLine("NX 6.0.0") sw.WriteLine("Macro File: " & macroFile) sw.WriteLine("Macro Version 7.30") sw.WriteLine("Macro List Language and Codeset: simplified chine 13") sw.WriteLine("Created by Administrator on Fri Aug 21 18:28:49 2015") sw.WriteLine("Part Name Display Style: $FILENAME") sw.WriteLine("Selection Parameters 1 2 0.305380 1") sw.WriteLine("Display Parameters 1.000000 19.601460 14.127756 -1.000000 -0.720750 1.000000 0.720750") sw.WriteLine("*****************") sw.WriteLine("RESET") sw.WriteLine(String.Format("MENU, {0}, {1} UG_GATEWAY_MAIN_MENUBAR ! ", If(ToggleStatus = MenuButton.Toggle.Off, 0, 1), menuBtn.ButtonName)) sw.Close() If ExecuteMacro(macroFile) Then response = True End If File.Delete(macroFile) Catch ex As Exception End Try Return response End Function
using System.IO; using System.Runtime.InteropServices; using NXOpen.MenuBar; [DllImport("libugui", EntryPoint = "?MACRO_playback_from_usertool@@YAXPEBD@Z", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] private void MACRO_playback_from_usertool(string lpName) { } [DllImport("libugui", EntryPoint = "?MACRO_playback_from_usertool@@YAXPBD@Z", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] //32位用法 private void MACRO_playback_from_usertoolA(string lpName) { } /// <summary> /// 执行宏文件. /// </summary> /// <param name="macroFile">指定宏文件路径</param> /// <returns><c>true</c> 运行成功, <c>false</c> 否则.</returns> public bool ExecuteMacro(string macroFile) { bool response = false; try { if (File.Exists(macroFile)) { if (IntPtr.Size == 8) { MACRO_playback_from_usertool(macroFile); } else { MACRO_playback_from_usertoolA(macroFile); } response = true; } } catch (Exception ex) { } return response; } /// <summary> /// 激活NX窗口按钮 /// </summary> /// <param name="menuBtn">指定需要激活的按钮,必须是PushButton或者ApplicationButton</param> /// <returns>激活成功,返回<c>true</c>,否则返回<c>false</c>。</returns> /// <remarks> /// 最低版本NX6.0.0,<br/> /// 许可证要求: None. /// </remarks> /// <example> /// <code src="src" language="VB.NET" encoding="c"/> /// Dim menuBtn As NXOpen.MenuBar.MenuButton<br/> /// menuBtn= NXOpen.UI.GetUI.MenuBarManager.GetButtonFromName("UG_MODELING_BLOCK_FEATURE")<br/> /// menuBtn.ActiveMenuButton()<br/> /// <code src="src" language="C#" encoding="c"/> /// NXOpen.MenuBar.MenuButton menuBtn<br/> /// menuBtn= NXOpen.UI.GetUI.MenuBarManager.GetButtonFromName("UG_MODELING_BLOCK_FEATURE");<br/> /// menuBtn.ActiveMenuButton();<br/> /// </example> public bool ActiveMenuButton(MenuButton menuBtn) { bool response = false; try { if (menuBtn == null) { break; // TODO: might not be correct. Was : Exit Try } dynamic menuType = menuBtn.ButtonType; if (menuType != MenuButton.Type.PushButton || menuType == MenuButton.Type.ApplicationButton) { break; // TODO: might not be correct. Was : Exit Try } string macroFile = Path.GetDirectoryName(My.Application.GetType.Assembly.Location) + "\\actionBtn.macro"; if (File.Exists(macroFile)) { File.Delete(macroFile); } StreamWriter sw = new StreamWriter(macroFile); sw.WriteLine("NX 6.0.0"); sw.WriteLine("Macro File: " + macroFile); sw.WriteLine("Macro Version 7.30"); sw.WriteLine("Macro List Language and Codeset: simplified chine 13"); sw.WriteLine("Created by Administrator on Fri Aug 21 18:28:49 2015"); sw.WriteLine("Part Name Display Style: $FILENAME"); sw.WriteLine("Selection Parameters 1 2 0.305380 1"); sw.WriteLine("Display Parameters 1.000000 19.601460 14.127756 -1.000000 -0.720750 1.000000 0.720750"); sw.WriteLine("*****************"); sw.WriteLine("RESET"); sw.WriteLine(string.Format("MENU, 0, {0} UG_GATEWAY_MAIN_MENUBAR ! ", menuBtn.ButtonName)); sw.Close(); if ExecuteMacro(macroFile)) { response = true; } File.Delete(macroFile); } catch (Exception ex) { } return response; } /// <summary> /// 激活NX窗口按钮toggle按钮. /// </summary> /// <param name="menuBtn">ToggleButton.</param> /// <param name="ToggleStatus">切换状态</param> /// <returns>激活成功,返回<c>true</c>,否则返回<c>false</c>。</returns> /// <remarks> /// 最低版本NX6.0.0,<br/> /// 许可证要求: None. /// </remarks> /// <example> /// <code src="src" language="VB.NET" encoding="c"/> /// Dim menuBtn As NXOpen.MenuBar.MenuButton<br/> /// menuBtn= NXOpen.UI.GetUI.MenuBarManager.GetButtonFromName("UG_WCS_DISPLAY")<br/> /// menuBtn.ActiveToggleButton()<br/> /// <code src="src" language="C#" encoding="c"/> /// NXOpen.MenuBar.MenuButton menuBtn<br/> /// menuBtn= NXOpen.UI.GetUI.MenuBarManager.GetButtonFromName("UG_WCS_DISPLAY");<br/> /// menuBtn.ActiveToggleButton();<br/> /// </example> public bool ActiveToggleButton(MenuButton menuBtn, MenuButton.Toggle ToggleStatus) { bool response = false; try { if (menuBtn == null) { break; // TODO: might not be correct. Was : Exit Try } if (menuBtn.ButtonType != MenuButton.Type.ToggleButton) { break; // TODO: might not be correct. Was : Exit Try } if (menuBtn.ToggleStatus == ToggleStatus) { break; // TODO: might not be correct. Was : Exit Try } string macroFile = Path.GetDirectoryName(My.Application.GetType.Assembly.Location) + "\\actionBtn.macro"; if (File.Exists(macroFile)) { File.Delete(macroFile); } StreamWriter sw = new StreamWriter(macroFile); sw.WriteLine("NX 6.0.0"); sw.WriteLine("Macro File: " + macroFile); sw.WriteLine("Macro Version 7.30"); sw.WriteLine("Macro List Language and Codeset: simplified chine 13"); sw.WriteLine("Created by Administrator on Fri Aug 21 18:28:49 2015"); sw.WriteLine("Part Name Display Style: $FILENAME"); sw.WriteLine("Selection Parameters 1 2 0.305380 1"); sw.WriteLine("Display Parameters 1.000000 19.601460 14.127756 -1.000000 -0.720750 1.000000 0.720750"); sw.WriteLine("*****************"); sw.WriteLine("RESET"); sw.WriteLine(string.Format("MENU, {0}, {1} UG_GATEWAY_MAIN_MENUBAR ! ", ToggleStatus == MenuButton.Toggle.Off ? 0 : 1, menuBtn.ButtonName)); sw.Close(); if (ExecuteMacro(macroFile)) { response = true; } File.Delete(macroFile); } catch (Exception ex) { } return response; }
使用方法:
Dim theUI As NXOpen.UI = NXOpen.UI.GetUI()
Dim menuBtn = theUI.MenuBarManager.GetButtonFromName("UG_MODELING_BLOCK_FEATURE")
ActiveMenuButton(menuBtn)
static BOOL RunMacro(const char* macropath) { try { if(!PathFileExists(macropath)) return FALSE; typedef void (_stdcall *MyFun )( char const * ); MyFun mfun = NULL; HINSTANCE hHandle = NULL; char *ptr; UF_translate_variable("UGII_ROOT_DIR", &ptr); CString strDllPath(ptr); sprintf(ptr,"%s\\libugui.dll", ptr); hHandle = LoadLibraryA(ptr /*"D:\\Program Files\\UGS\\NX 7.5\\UGII\\libugui.dll" */); mfun = (MyFun)::GetProcAddress(hHandle, "?MACRO_playback_from_usertool@@YAXPBD@Z") ; if( mfun != NULL ) { mfun(macropath ); } else return FALSE; } catch(...) { return FALSE; } return TRUE; }
GRIP调用宏(本人没有测试)
xspawn/concur,'D:\qq.micro'
halt