我正在编写一个调用QProcess :: startDetached(“wscript.exe script.vbs”)的Qt应用程序,以在Windows中显示删除确认对话框。
这是剧本:
Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace("-") Set objFolderItem = objFolder.ParseName("-") objFolderItem.InvokeVerb("Delete")
Namespace和ParseName的参数来自传递给脚本的参数。
这可能效率低下,因为它在运行脚本之前首先打开外部应用程序。我想知道我是否可以在Qt应用程序中运行VBScripts。
如果没有,我可以做什么选择?
答案 0 :(得分:2)
我的VBScript非常弱,所以我不能100%确定我理解你要做的事情。我的假设是您正在尝试删除文件夹,但希望在操作发生时为用户提供正常的确认框和动画。如果这不正确,请告诉我,我将删除此答案。
一些想法:
答案 1 :(得分:0)
您应该阅读IActiveScript COM接口。您可以创建实现IActiveScript的解释器实例,以提供用于评估脚本的运行时。 VBScript和JScript都可用于此,许多其他第三方脚本语言也提供IActiveScript支持。
使用它的概述是您创建语言运行时(例如VBScript的实例),然后向其添加一些自定义对象。通常,如果要将解释器嵌入到应用程序中,那么公开Application对象是一个很好的起点。这可以只是一个IDispatch接口或更具体的IDL生成的类型库和所有修剪。将必要的命名项添加到运行时后,您将加载一个或多个脚本。现在,当您将其状态切换为活动状态或正在运行时,脚本中声明的任何公共函数或子例程都将通过实时运行时的IDispatch接口公开。为了实际运行脚本程序,我为我的东西调用Main函数 - 你可以选择一些适用于你的环境的其他方案。
ActiveScripting的优点是更改语言,只需更改运行时CLSID即可。因此,如果人们更喜欢Perl,他们可以使用PerlScript或PythonScript等。您的Application对象保持不变,因此您不必编写其他代码来支持新语言。唯一的要求是一切都是COM。