如何在不涉及cscript.exe或wscript.exe的情况下在Qt应用程序中运行VBScript?

如何在不涉及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的解释器实例,以

我正在编写一个Qt应用程序,它调用QProcess::startDetached(“wscript.exe script.vbs”)来显示Windows中的删除确认对话框

以下是脚本:

Namespace和ParseName的参数来自传递给脚本的参数

这可能效率低下,因为它在运行脚本之前先打开外部应用程序。我想知道我是否可以在Qt应用程序中运行VBScripts


如果没有,我可以做什么选择?

您应该阅读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,我怀疑您是否会看到任何性能问题,除非在循环或其他过程中多次调用它。你知道,古老的“过早优化是万恶之源”的说法

我相信你的回答确实解决了我的问题,但对于这样一个简单的目标来说,这未免太过分了。我只想显示“删除”的本机确认框并将文件发送到回收站。谢谢你,Dave,你对我要做的事情有正确的想法。我试图将一个文件发送到回收站,同时显示本机确认对话框以处理额外的错误处理。我不知道如何以任何其他方式将文件发送到回收站,因此我认为您的第一个答案解决了我的问题。非常感谢。WScript并没有那么糟糕——至少你没有得到像CScript这样的新窗口。您在VBS中所做的一切就是创建COM对象和调用方法。我不知道QT,但也许它有直接使用COM的方法。
Set objShell = CreateObject("Shell.Application") 
Set objFolder = objShell.Namespace("-") 
Set objFolderItem = objFolder.ParseName("-") 
objFolderItem.InvokeVerb("Delete")