想仿照录制的宏实现自动匹配打印,能打开打印对话框,但是并不能完成打印,且设置也未生效。
录制的宏和仿写的代码如下:
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");
实际运行效果停在下面这个界面:
这个录制的并不都是直接的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启动时都会先分析该程序中的键入命令,然后加入到系统可看到的命令表中。如下图所示,能看到这个变量下附加了巨多的程序名称。
非常感谢!