CAPL 脚本下调用cmd 和其它应用程序

您所在的位置:网站首页 如何停止命令窗口的执行 CAPL 脚本下调用cmd 和其它应用程序

CAPL 脚本下调用cmd 和其它应用程序

2024-07-14 06:44| 来源: 网络整理| 查看: 265

📙 相关文章

在这里插入图片描述

🚩本章节内容演示源码下载,点击跳转👇 📘前言 🍅 CAPL脚本中插入cmd指令和调用第三方程序🍅演示软硬件环境 Win10 x64 ; CANoe 11 SP2 x64

请添加图片描述

目录 📙 相关文章📘前言📙 sysExecCmd 调用cmd指令🍅 参数char cmd[]🍅 参数char params[]🍅 参数char directory[]🍅 自动关闭cmd控制台 📙 sysExecCmd 调用可执行程序🍅 调用bat 文件🍅 调用python 文件 (带参数)🍅 调用其它`exe`程序 📙 sysExec🌎总结

📙 sysExecCmd 调用cmd指令 🍅如下图help文档给出的解释,调用cmd 给了4中类型,接下来我们逐个解读下

在这里插入图片描述

🍅 参数char cmd[] 1️⃣ 先不管 参数 char params[], 和char directory[] ,先看参数char cmd[],下面代码,直接什么都不写,直接调用sysExecCmd On key 'a' { sysExecCmd("", "" ); } 2️⃣ 输出结果可以看出,直接打开了cmd 控制台,而且根目录是当前打开的cfg所在的根目录 在这里插入图片描述 3️⃣ 我们用cd 指令进入到指定的路径下。 on key 'b' { char cmd[255]; char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD"; snprintf(cmd,elCount(cmd),"cd %s",basePath); sysExecCmd(cmd, "" ); } 4️⃣ 输出结果可以看出,正确执行了我们的cd 指令

在这里插入图片描述

🍅 参数char params[] 1️⃣ 了解了char cmd[], 我们再看参数 char params[] ,因为有些cmd指令是有参数的,这里我们可以在第二个参数中写如cmd的参数 on key 'c' { sysExecCmd("dir", "" ); } on key 'd' { sysExecCmd("dir", "/w" ); } 2️⃣ 输出结果可以看出 ,参数设置生效了。

在这里插入图片描述

3️⃣ 参数直接在cmd参数里面写入效果也是一样的。 on key 'e' { sysExecCmd("dir /w", "" ); } 🍅 参数char directory[] 1️⃣ 了解了char cmd[], 参数 char params[] ,我们再看下参数char directory[]没这个参数,cmd 默认进入打开的cfg文件所在的目录,有这个参数,cmd将进入 指定的路径下 on key 'g' { char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD"; sysExecCmd("dir /w", "",basePath ); } 2️⃣ 输出结果可以看出 ,参数设置生效了。

在这里插入图片描述

🍅 自动关闭cmd控制台 1️⃣ 上面调用cmd 控制台后,如果你不关闭,他是不会关闭,最好就是执行完功能后给它自动关闭掉比如,我们在写脚本中,可能想临时创建个文件或者有时候要把某个文件的只读属性给去除,这个时候才CAPL脚本中插入一行 sysExecCmd 就很方便& exit 可以运行完指令后再退出 on key 'h' { char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD"; sysExecCmd("echo hello > a.txt & exit", "",basePath ); } 2️⃣ 运行完毕后,你会发现cmd一闪而过,而指令也已经完成了

在这里插入图片描述

📙 sysExecCmd 调用可执行程序 🍅 调用bat 文件 1️⃣ 上面我们用cmd的复合指令完成了创建a.txt文件,毕竟cmd指令无法完成更加复杂的指令,我们可以在bat文件中,完善代码,然后再取调用它 在这里插入图片描述 2️⃣ CAPL脚本如下,运行下可以得到b.txt文件被创建了: on key 'j' { char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD"; sysExecCmd("callBat.bat", "",basePath ); } 🍅 调用python 文件 (带参数) 1️⃣ 下面我们调用下python脚本,并传递三个参数 on key 'k' { char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD"; sysExecCmd("python callPython.py", "100 200 300", basePath); }

2️⃣ 执行结果如下:

在这里插入图片描述

在这里插入图片描述

🍅 调用其它exe程序 1️⃣ 下面脚本可以让我们直接打开计算器 on key 'l' { sysExecCmd("calc & exit", ""); } 📙 sysExec 1️⃣ 这个格式cmd参数传递的必须是个可执行程序,不是能dos 指令可以执行下,下面两种方式的差别:sysExecCmd 会打开cmd 控制台sysExec 不会打开控制台 或者打开控制台自动关闭 on key 'l' { sysExecCmd("calc & exit", ""); } on key 'z' { sysExec("calc", ""); } 2️⃣ 下面我们通过调用下callBat2.bat脚本,来看下sysExec究竟和sysExecmd 还有什么区别 on key 'v' { long retVal; char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD"; retVal = sysExec("callBat2.bat", "",basePath ); write("retVal:%d",retVal); } 返回值居然是0;用 sysExecmd可以正常执行的用 sysExec却不行了?

在这里插入图片描述

3️⃣ cmd 参数必须是绝对路径,相对路劲都不行 on key 'n' { long retVal; char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD"; retVal = sysExec("D:\\CANoe-Demo\\TestModule\\callCMD\\callBat2.bat", "",basePath ); write("retVal:%d",retVal); } 运行结果如下图,在 D:\\CANoe-Demo\\TestModule\\callCMD路径下创建了c.txt ,如果改成 retVal = sysExec("D:\\CANoe-Demo\\TestModule\\callCMD\\callBat2.bat", "" ); 创建文件的路径还相同吗?有兴趣的可以自己试试。

在这里插入图片描述

4️⃣ 奇怪是真的奇怪,如果没有char directory[]) ,那么又可以用相对路径了下面代码,执行成功了,并在D:\\CANoe-Demo 路径也就是cfg所在目录下创建了c.txt on key 'm' { long retVal; retVal = sysExec(".\\TestModule\\callCMD\\callBat2.bat", "" ); write("retVal:%d",retVal); }

23

🌎总结

请添加图片描述

✂️ 经过上面的尝试,如果想在capl中调用exe 或者执行dos 指令 ,博主建议使用sysExecCmd格式

✂️ 也可通过关注下方的公众号免费领取上面的源码,CANoe软件,ISO标准,学习资料等海量资源👇

7

🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡! 🚩 有手机的小伙伴可以加下交流群,在车载诊断领域的一个小小圈子,群里有网盘资料,源码,可能有你需要的呢,平时可以交流技术,聊聊工作机会啥的。 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。 18


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3