• 激活NX窗口的按钮


    原理:取得按钮名称以后,通过运行宏文件激活按钮

    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
    VB.NET代码
    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;
    }
    C#代码

    使用方法

    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;
    }
    C运行宏

    GRIP调用宏(本人没有测试)

    xspawn/concur,'D:qq.micro'

    halt

  • 相关阅读:
    Jmeter正则表达式提取器(转载)
    Jmeter(三十九)获取响应结果中参数出现的次数(转载)
    JMeter3.0(三十八)图形化HTML报告中文乱码问题处理(转载)
    JMeter学习(三十七)Jmeter录制手机app脚本(转载)
    JMeter学习(三十六)发送HTTPS请求(转载)
    JMeter学习(三十四)使用jmeter来发送json/gzip格式数据(转载)
    用BlazeMeter录制JMeter(三十五)测试脚本(转载)
    JMeter学习(三十三)测试报告优化(转载)
    Jmeter学习(三十二)调试工具Debug Sampler(转载)
    ‘cmake' 不是内部或外部命令 也不是可运行的程序 或批处理文
  • 原文地址:https://www.cnblogs.com/bizca/p/4755553.html
Copyright © 2020-2023  润新知