【msce c#】PW唤起的窗口无法被IModalDialogEvents捕捉

为了在OPM中在调用代码时,自动关闭弹出窗口,所以继承IModalDialogEvents生成了一个类,专门用于关闭或处理弹出窗口。对OPM本身弹出的窗口是有效的,但是当在OPM中登录PW之后,会在选择文件之类的窗口前弹出PW的窗口页面,但是这个窗口不会被OnDialogOpened捕捉,请问这种情况要如何处理?

用宏录入过登录PW后手动使用打印的过程,发现录下来的代码和没有开PW时一模一样,登录PW后新打开的对话框并没有被记录。

捕捉弹出窗的代码如下,在没有登录PW的时候是有效的,登录之后,会被下面的弹出窗口打断,设置也不起作用了,数据也没有正常填入。

class CloseAndIgnoreDialog : IModalDialogEvents
    {
        public void OnDialogOpened(string DialogBoxName, ref MsdDialogBoxResult DialogResult)
        {
            BIM.Application ComApp = Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp;
            if (DialogBoxName == "选择打印机驱动程序配置文件")
            {
                ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setDirectoryCmd " + CONFIG_ROOT_PATH);
                ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setFileNameCmd pdf1.pltcfg");
                DialogResult = MsdDialogBoxResult.OK;
            }
            if (DialogBoxName == "另存打印为")
            {
                ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setDirectoryCmd "+plotFilePath);
                ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setFileNameCmd "+plotFileName);
                DialogResult = MsdDialogBoxResult.OK;
            }
            DialogResult = MsdDialogBoxResult.No;
            //DialogResult = MsdDialogBoxResult.Cancel;//用cancel也无用 
        }

        public void OnDialogClosed(string DialogBoxName, MsdDialogBoxResult DialogResult)
        {
        }
    }

登录PW后,设置笔表时新打开的对话框:

在上面的对话框中单击“取消”,能正常进入普通的“选择笔表文件”对话框。

点击“打印到文件”,会打开下面的对话框:

在上面的界面点击“取消”后,也能打开正常设置结果存放路径的对话框。

  • 点击取消以后,后边弹出的对话框是否能捕捉到?

  • 点击取消后,后边弹出的对话框能捕捉到。另外我发现这段写得有点问题,改成了下面这样:

    class CloseAndIgnoreDialog : IModalDialogEvents
        {
            public void OnDialogOpened(string DialogBoxName, ref MsdDialogBoxResult DialogResult)
            {
                LogTool.LogTest("记录捕获的弹出窗口:" + DialogBoxName);
                BIM.Application ComApp = Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp;
                if (DialogBoxName == "选择打印机驱动程序配置文件")
                {
                    ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setDirectoryCmd " + CONFIG_ROOT_PATH);
                    ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setFileNameCmd pdf1.pltcfg");
                    DialogResult = MsdDialogBoxResult.OK;
                }
                else if (DialogBoxName == "另存打印为")
                {
                    ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setDirectoryCmd "+plotFilePath);
                    ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setFileNameCmd "+plotFileName);
                    DialogResult = MsdDialogBoxResult.OK;
                }
                else{
                    DialogResult = MsdDialogBoxResult.No;
                    //DialogResult = MsdDialogBoxResult.Cancel;//用cancel也无用 
                }
            }
    
            public void OnDialogClosed(string DialogBoxName, MsdDialogBoxResult DialogResult)
            {
            }
        }

    最终输出的记录结果是:

    2022/5/26 9:27:32 : 记录捕获的弹出窗口:选择打印机驱动程序配置文件
    2022/5/26 9:27:35 : 记录捕获的弹出窗口:另存打印为

  • 看样子像是PW也添加了捕捉器,您试试将您的插件指定给下图所示的这个配置变量,这样做的作用是在Mstn启动以后就会立马加载您的程序集,然后在程序集的入口Run函数中添加您的监听器。、

    Answer Verified By: 徐 明卉 

  • 配置了这个变量后,仍然无法捕捉到。配置完成后,重启过OPM,发现无法捕捉到之后,还重启过电脑,仍然捕捉不到。另外这个变量在编辑过后,这条变量名变成了蓝色,重启后仍然是蓝色的,是不是还要做别的操作刷新配置?

  • 向导可以通过PW里面的设置关掉,但是保存或者涉及选路径的时候,会自动唤起一个同名窗口,这个窗口有办法捕捉或者暂时屏蔽掉么?

    下面是PW唤起的窗口:

    点取消后,会唤起正常窗口: