激活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
激活NX窗口的按钮的更多相关文章
- atitit.激活一个窗口总结 swing java .net php
atitit.激活一个窗口总结 1 激活窗口:鼠标激活vswindows消息激活 1.1 Web框架激活 2 退出激活窗口热键(dbg模式) 3 俩个窗口激活优先级 ...
- Winform禁止程序多开 &&禁止多开且第二次激活第一次窗口
一.禁止多开问题,运用Mutex锁 在Program.cs中运用Mutex锁 bool createNew;using (System.Threading.Mutex mutex = new Syst ...
- NX屏蔽窗口的按钮
有时候在激活一个命令按钮的时候,需要同时禁止掉另外一个或多个命令按钮 ''' <summary> ''' 取按钮是否敏感 ''' </summary> ''' <para ...
- window窗口-button(按钮)-dialog(对话框,带按钮)
描述:一个可拖动的窗口程序,默认情况下窗口自由移动.调整大小.打开关闭! 案例1(普通的窗口): <div class="easyui-window" icon-Cls=&q ...
- emwin 解决在A窗口上新建B窗口后‘只激活’B窗口问题
@2018-08-08 问题来源: 要实现A窗口上的参数修改,通过A窗口上新建的B窗口小键盘实现数据录入,但结果是只要点击A窗口上的任何地方(包括B窗口上的任意位置),则B窗口就消失了 解决办法: 使 ...
- Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)
PyQt4是用来编写有图形界面程序(GUI applications)的一个工具包.PyQt4作为一个Python模块来使用,它有440个类和超过6000种函数和方法.同时它也是一个可以在几乎所有主流 ...
- VC程序只运行一个实例,并在打开多个时激活原窗口
(一)单文档应用程序 1.在应用程序类C~~App::InitInstance()函数中判断是否已有一个应用程序实例正在运行 BOOL C~~App::InitInstance() { . ...
- C# 激活主窗口
今天同学跟我说了一个bug,虽然很简单,但还是记录一下,也好让我养成写东西的习惯. C# windows form 程序中,发生某个事件时,需要自动弹出一个窗口,提示用户,并等待用户输入进行处理. 如 ...
- 【windows 操作系统】什么是窗口?|按钮也是窗口
起因 在看操作系统消息机制的时候,看到一句化:全局消息队列把消息发送到窗口所在的线程消息队列.突然就怀疑起了窗口的意思.于是就有这边基类. 文章来源:https://docs.microsoft.co ...
随机推荐
- C#多线程开发-线程池03
你好,我是阿辉. 前面2篇文章介绍了线程的基础知识和线程同步,下面我们来一起认识学习下,线程池的使用. 线程池 创建线程是昂贵的操作,所以为每个短暂的异步操作创建线程会产生显著的开销.一般情况下,都会 ...
- mybaits源码分析--事务管理(八)
一.事务管理 写到这也快进入收尾阶段了了,在介绍MyBatis中的事务管理时不可避免的要接触到DataSource的内容,所以接下来会分别来介绍DataSource和Transaction两块内容. ...
- 洛谷P2115 Sabotage G 题解
题目 [USACO14MAR]Sabotage G 题解 本蒟蒻又来了,这道题可以用二分答案来解决.我们可以设答案最小平均产奶量为 \(x \ (x \in[1,10000])\) .然后二分搜索 \ ...
- jvm学习笔记:类加载过程
类加载器子系统 类加载器的作用是加载class文件到内存 加载阶段->链接阶段->初始化阶段 ClassLoader只负责class文件的加载,至于是否能够运行由执行引擎判断 加载的类信息 ...
- 只需3步,快来用AI预测你爱的球队下一场能赢吗?
摘要:作为球迷,我们有时候希望自己拥有预测未来的能力. 本文分享自华为云社区<用 AI 预测球赛结果只需三步,看看你爱的球队下一场能赢吗?>,作者:HWCloudAI. 还记得今年夏天的欧 ...
- mysql远程连接以及错误解决&命令行基本操作
现在大家的程序服务基本都是部署在云服务器上,今天我分享记录一下:使用mysql数据库过程中比较常见操作和遇到的问题 环境:lunix 系统(阿里云服务器,华为云服务器,腾讯云等均适用) + mysql ...
- SpringMVC-初见
目录 什么是SpringMVC? DispatcherServlet 第一个MVC程序 配置版 Maven可能存在资源过滤的问题 注解版 RestFul和控制器 实现Controller接口 使用注解 ...
- HCNP Routing&Switching之IS-IS邻居建立、LSDB同步、拓扑计算和路由形成
前文我们了解了IS-IS的报文结构和类型相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15260670.html:今天我们来聊一聊IS-IS建立邻居. ...
- 小狐狸钱包怎么使用?MetaMask(小狐狸) 使用教程 - 如何添加BSC链、Heco链
MetaMask介绍 MetaMask是一款在谷歌浏览器Chrome上使用的插件类型的以太坊钱包,只需要在谷歌浏览器添加对应的扩展程序即可使用. 1.Download & Install: 官 ...
- 1.Java 基础
1. JDK 和 JRE 有什么区别? jdk:开发工具包,jre:java运行环境 jdk包含了jre和java开发环境,如编译java源码的编译器javac,还包含了许多java程序调试和分析的工 ...