在C++里执行VBS 如何执行VBS命令啊 比如Wscript.Sleep 5000 '

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C++里执行VBS 如何执行VBS命令啊 比如Wscript.Sleep 5000 '相关的知识,希望对你有一定的参考价值。

先写好一个VBS脚本放在相对于主程序(要调用VBS的程序)的某个目录下,比如主程序叫“main.exe”位置是“D:\\test”,VBS脚本(叫“test.vbs”)放在“D:\\test\\A\\B\\C”,那么调用的命令(C/C++)是:

system("cd/d D:\\\\test");
system("\\"A\\\\B\\\\C\\\\test.vbs\\"");

原理是:CMD脚本可以直接调用VBS脚本,上面的system是用来调用CMD命令的,而CMD命令中可以调用另外的脚本(CMD脚本或VBS或程序等)。所以这样写是间接调用VBS脚本,借助CMD调用了VBS

注意:第一句执行的CMD命令是把CMD的当前目录切换到正确的位置,程序调用CMD命令时CMD的当前目录不程序当前目录,而是CMD的默认路径;system函数的头文件是stdlib.h。

完整示例代码:

#include <windows.h>
#include <string>
using namespace std;

int main() 
  // VBS调用命令文本(使用相对路径的写法, 注意首尾要加双引号)
  char vbs[] = "\\"..\\\\test.vbs\\"";
  // 获取当前目录字符串的长度
  int bufLen = GetCurrentDirectory(0, NULL);
  // 分配字符串空间
  char* pwd = new char[bufLen];
  // 正式获取当前目录字符串
  GetCurrentDirectory(bufLen, pwd);

  // 组装cd命令
  string cmd(pwd);
  cmd.insert(0, "cd/d ");
  // 调用CMD命令, 转移到程序运行目录
  system(cmd.data());

  // 调用CMD命令, 间接调用指定的VBS脚本
  system(vbs);

  delete[] pwd;
  return 0;

注意:如果使用开发环境调试的话可能会出现命令执行错误的现象,原因是开发环境调试时的当前目录不是exe文件所在目录,在实际直接执行程序时的当前目录就是exe文件所在目录

示例VBS脚本(test.vbs):

MsgBox("testVBS")

测试结果:

我用VC6写的C++,VBS脚本test.vbs在图中“try10”目录下,执行的程序“try10.exe”在“Debug”目录下。

P.S. 只要这个语言能调用CMD命令,CMD能调用的这个语言就都能调用,并不存在不界线,借助CMD就能打破界线。

参考技术A vbs不是在c++里面执行的 参考技术B 你可以直接用API函数 sleep 参考技术C 不是。。。

如何把VBS转换为EXE文件

如下所示,我想要做一个把360网速测试剥离开来的绿色版,有一个TestSpeed.bat命令,双击之后去执行了360AppLoader.exe,并且会调用netmon文件夹的NetSpeed.dll文件。这样的确可以实现运行360网速测试,但是bat运行的时候会有一个黑框,很不爽。

 

于是可以做一个VBS文件去运行这个BAT命令,双击也可以执行,并且没有黑框了。但是VBS没法继续组装了(比如我要做一个软件外壳,然后点击一个按钮之后执行一个EXE文件),所以我们还需要把这个VBS转换为EXE

 

网上的确有VBS2EXE,但是效果很不理想,这里介绍一个AutoIT脚本工具,只有一行命令,即可运行这个VBS脚本。

 

当然,把TestSpeed.au3转换成EXE就方便多了。点击工具,编译脚本,然后设置一下目标文件名,改一下图标即可。

以上是关于在C++里执行VBS 如何执行VBS命令啊 比如Wscript.Sleep 5000 '的主要内容,如果未能解决你的问题,请参考以下文章

vbs执行系统命令

如何让英雄联盟启动后执行vbs

如何在vbs中执行批处理命令

VBS+bat后强大的功能

这位大侠 我的也是找不到slmgr.vbs这个文件怎么办啊? 帮帮忙

各位vbs高手进来,如何用 VBS来编写 执行组合键