如何在不涉及cscript.exe或wscript.exe的情况下在Qt应用程序中运行VBScript?
我正在编写一个Qt应用程序,它调用QProcess::startDetached(“wscript.exe script.vbs”)来显示Windows中的删除确认对话框 以下是脚本: Namespace和ParseName的参数来自传递给脚本的参数 这可能效率低下,因为它在运行脚本之前先打开外部应用程序。我想知道我是否可以在Qt应用程序中运行VBScripts如何在不涉及cscript.exe或wscript.exe的情况下在Qt应用程序中运行VBScript?,qt,vbscript,Qt,Vbscript,我正在编写一个Qt应用程序,它调用QProcess::startDetached(“wscript.exe script.vbs”)来显示Windows中的删除确认对话框 以下是脚本: Namespace和ParseName的参数来自传递给脚本的参数 这可能效率低下,因为它在运行脚本之前先打开外部应用程序。我想知道我是否可以在Qt应用程序中运行VBScripts 如果没有,我可以做什么选择?您应该阅读IActiveScript COM界面。您可以创建实现IActiveScript的解释器实例,以
如果没有,我可以做什么选择?您应该阅读IActiveScript COM界面。您可以创建实现IActiveScript的解释器实例,以提供用于评估脚本的运行时。VBScript和JScript都可以用于此目的,许多其他第三方脚本语言也提供了IActiveScript支持 使用它的概述是创建语言运行时(例如VBScript实例),然后向其中添加一些自定义对象。通常,如果将解释器嵌入到应用程序中,那么公开应用程序对象是一个很好的起点。这可能只是一个IDispatch接口,也可能是一个更具体的IDL生成的typelibrary和所有微调。将必要的命名项添加到运行时后,将加载一个或多个脚本。现在,脚本中声明的任何公共函数或子例程在您将其状态切换为active或running后,都将通过live runtime的IDispatch接口公开。为了实际运行脚本程序,我为我的东西调用了Main函数——您可以选择适用于您的环境的其他方案
ActiveScripting的好处在于改变语言,只需改变运行时CLSID。因此,如果人们喜欢Perl,他们可以使用PerlScript或PythonScript等。您的应用程序对象保持不变,因此您不必编写额外的代码来支持新语言。唯一的要求是一切都是COM。我的VBScript非常弱,因此我不能100%确定我是否理解您要做的事情。我的假设是,您正在尝试删除文件夹,但希望在操作发生时为用户提供正常的确认框和动画。如果这是不正确的,请让我知道,我会删除这个答案 一些想法:
-
<>你可以调用C++代码中的Windows API目录来完成这一任务。我相信正确的选择应该是使用(Vista和更高版本)或(Vista之前)
- Qt已经有消息框对话框。尽管您可能无法获得与本机shell完全相同的功能,但您可以使用此功能(QMessageBox::warning),然后使用QDir删除文件夹。这也将是跨平台的便携式
- 如果您坚持使用VBScript,我怀疑您是否会看到任何性能问题,除非在循环或其他过程中多次调用它。你知道,古老的“过早优化是万恶之源”的说法
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("-")
Set objFolderItem = objFolder.ParseName("-")
objFolderItem.InvokeVerb("Delete")