【msce c#】录制宏后仿照它写KEYIN但是参数没有正常设置进去

想仿照录制的宏实现自动匹配打印,能打开打印对话框,但是并不能完成打印,且设置也未生效。

录制的宏和仿写的代码如下:

BIM.Application ComApp = Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp;
ComApp.CadInputQueue.SendKeyin("PLACE FENCE ICON");
ComApp.CadInputQueue.SendKeyin("Point absolute 136884,2994");
ComApp.CadInputQueue.SendKeyin("Point absolute 196360,-39772");//增量 59476,-42066
ComApp.CadInputQueue.SendKeyin("DIALOG PLOT");
ComApp.CadInputQueue.SendKeyin("plotUI.uiPaperName = ISO A2");
ComApp.CadInputQueue.SendKeyin("打印缩放助手 Shown");
ComApp.CadInputQueue.SendKeyin("plotUI.uiScaleBox2Edit = 100");
ComApp.CadInputQueue.SendKeyin("打印缩放助手 Closed");
ComApp.CadInputQueue.SendKeyin("plotUI.uiColorMode = 0");
ComApp.CadInputQueue.SendKeyin("PRINT EXECUTE");
ComApp.CadInputQueue.SendKeyin("另存打印为 Shown");
ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setDirectoryCmd C:\\Users\\46054\\Desktop\\");
ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setFileNameCmd 测试打印0524.pdf");
ComApp.CadInputQueue.SendKeyin("另存打印为 Closed");
ComApp.CadInputQueue.SendKeyin("PRINT EXIT PLOTDLG");
ComApp.CadInputQueue.SendKeyin("MDL UNLOAD PLOTDLG");

实际运行效果停在下面这个界面:

Parents
  • 这个录制的并不都是直接的Keyin,比如Point absolute 136884,2994和plotUI.uiPaperName = ISO A2就不是。故不能都用SendKeyin来模拟。你可以打开这个宏后点击如下图所示的Promote将宏升级到VBA代码再来查看。VBA代码更接近于C# 代码。



  • 根据VB的改了之后,能进行打印了,但是设置变化了却没有生效。就是在界面上,看见已经改成了黑白和a2,但是生成的文件没有按照设置的效果生成。而且是需要额外打开对话框的,如缩放和文件位置,这两个生效了,在打印本页面中的颜色和纸张匹配没生效。

    static public void PrintTest()
            {
                BIM.Application ComApp = Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp;
                KeyInDlgClass kic = new KeyInDlgClass();
                ComApp.AddModalDialogEventsHandler(kic);
    
                ComApp.CadInputQueue.SendKeyin("PLACE FENCE ICON");
                ComApp.CadInputQueue.SendKeyin("Point absolute 136884,2994");
                ComApp.CadInputQueue.SendKeyin("Point absolute 196360,-39772");//增量 59476,-42066
                ComApp.CadInputQueue.SendKeyin("DIALOG PLOT");
                ComApp.SetCExpressionValue("plotUI.uiPaperName", "ISO A1", "PLOTDLG");
                ComApp.SetCExpressionValue("plotUI.uiColorMode", "0", "PLOTDLG");
                //Thread.Sleep(2000);//延迟也无用
                ComApp.CadInputQueue.SendKeyin("PRINT EXECUTE");
                ComApp.CadInputQueue.SendKeyin("PRINT EXIT PLOTDLG");
                ComApp.CadInputQueue.SendKeyin("MDL UNLOAD PLOTDLG");
                ComApp.RemoveModalDialogEventsHandler(kic);
            }
    class KeyInDlgClass : IModalDialogEvents
        {
             public void OnDialogOpened(string DialogBoxName, ref MsdDialogBoxResult DialogResult)
            {
                BIM.Application ComApp = Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp;
                if (DialogBoxName == "打印缩放助手")
                {
                    ComApp.SetCExpressionValue("plotUI.uiScaleBox2Edit", "100", "PLOTDLG");
                    DialogResult = MsdDialogBoxResult.OK;
                }
                if (DialogBoxName == "另存打印为")
                {
                    ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setDirectoryCmd C:\\Users\\46054\\Desktop\\");
                    ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setFileNameCmd 测试打印0525.pdf");
                    DialogResult = MsdDialogBoxResult.OK;
                }
            }
        }

    测试还发现一个奇怪的效果,运行代码:

    ComApp.SetCExpressionValue("plotUI.uiPaperName", "ISO A2", "PLOTDLG");
    ComApp.SetCExpressionValue("plotUI.uiColorMode", "0", "PLOTDLG");

    左侧图是手动设置颜色和纸张之后的效果,右侧图是代码改过后的面板效果:

  • 命令是可以用,但是没法查了,点击第一栏的print,后面第二栏不会像昨天那样出现可用的命令,只能自己输入。但是我想查命令就看不到了,还有别的地方可以查吗?

  • 按我上边说的操作一下就能查看了。

    Answer Verified By: 徐 明卉 

  • 刚刚用print调出来打印之后还是看不到,从菜单点击打印之后出现了

  • 键入命令是依赖MDL应用程序的,打印的应程序名称是PlotDlg,只有装载了该应用程序后才能在键入浏览器中查看Print开头的键入命令。

    您可以先键入MDL LOAD PlotDlg装载该应用后就可以了。

    如果不想出现打印对话框的话,可以静默装载。MDL SilentLoad PlotDlg

    您可能会进一步问:为什么有些键入命令我并未装载任何应用也能直接查看到呢?这是因为在MS启动时在某个配置文件(*.CFG)中将该应用程序添加到变量MS_CMDTABLE_LOAD中了。凡是被添加到这个变量中的应用程序,在MS启动时都会先分析该程序中的键入命令,然后加入到系统可看到的命令表中。如下图所示,能看到这个变量下附加了巨多的程序名称。



Reply Children
No Data