NXOPEN关于使用代码关闭UI

 

NXOPEN关于使用代码关闭UI

 

因为初始化不了,所以不能用

theDialog->PerformApply();

所以改用cwnd类模拟点击窗口来完成

 

以下头文件必须在最后面

#include <afxwin.h>  //必写

#undef CreateDialog  //必写
#include <NXOpen\UI.hxx>  //必写

如果不这样写,VS报错:

class "NXOpen::UI" 没有成员 "CreateDialogParamW"

 

 

_USRDLL

“DllMain 已经在 MSVCRTD.lib(dllmain.obj) 中定义以及找到一个或多个多重定义的符号”错误的解决方法

通过设置:项目-》属性-》配置属性-》C/C++/预处理器,去掉预处理器定义中的_USRDLL

 

还要把cpp里

#if CALLBACK

这一段的内容全部注释,不注释会报错

 

 

void Hello::Moni()
{
try
{

//HWND hWnd = ::GetForegroundWindow();

//ShowWindow(hWnd, SW_MINIMIZE);//最小化 hwnd 所代表的窗口

CWnd* pDesktopWnd = CWnd::GetForegroundWindow(); //1.先获得当前活动窗口

CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD); //2.获得一个子窗口

while (pWnd != NULL) //循环取得桌面下的所有子窗口
{
CWnd* pWnd2 = pWnd->GetWindow(GW_CHILD); //3.获得一个子窗口

while (pWnd2 != NULL)//循环取得桌面下的所有子窗口
{

CString strClassName = _T("");
::GetClassName(pWnd2->GetSafeHwnd(), strClassName.GetBuffer(256), 256); //获得窗口类名

CString strWindowText = _T("");
::GetWindowText(pWnd2->GetSafeHwnd(), strWindowText.GetBuffer(256), 256); //获得窗口标题


if (0 == strcmp(strClassName.GetBuffer(256), "Button") && (0 == strcmp(strWindowText.GetBuffer(256), "确定") || 0 == strcmp(strWindowText.GetBuffer(256), "OK")))
{

pWnd2->SetActiveWindow(); //激活当前按钮

PostMessage(pWnd2->GetSafeHwnd(), BM_CLICK, NULL, NULL); //模拟鼠标点击确定

//::SendMessage(pWnd2->GetSafeHwnd(), BM_CLICK, 0, 0); //模拟按键点击确定(不知道为啥没反应)

//::SendMessage(pWnd2->GetSafeHwnd(), WM_CLOSE, 0, 0); //模拟按键点击关闭
}

pWnd2 = pWnd2->GetWindow(GW_HWNDNEXT); //继续下一个子窗口
}

pWnd = pWnd->GetWindow(GW_HWNDNEXT); //继续下一个子窗口


}



}


catch (exception& ex)
{
//---- Enter your exception handling code here -----
Hello::theUI->NXMessageBox()->Show("模拟点击", NXOpen::NXMessageBox::DialogTypeError, ex.what());
}

}

posted @   firetuo  阅读(134)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示