Как запустить VBScript в приложении Qt без использования cscript.exe или wscript.exe? - PullRequest
0 голосов
/ 15 декабря 2011

Я пишу приложение Qt, которое вызывает QProcess :: startDetached ("wscript.exe script.vbs") для отображения диалогового окна подтверждения удаления в Windows.

это сценарий:

Set objShell = CreateObject("Shell.Application") 
Set objFolder = objShell.Namespace("-") 
Set objFolderItem = objFolder.ParseName("-") 
objFolderItem.InvokeVerb("Delete")

аргументы для Namespace и ParseName взяты из аргументов, переданных в сценарий.

Это может быть неэффективно, так как сначала открывается внешнее приложение перед запуском сценария.Мне было интересно, могу ли я запустить VBScripts в приложении Qt.

Если нет, то какие альтернативы я могу сделать?

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

Мой VBScript очень слабый, поэтому я не уверен на 100%, что понимаю, что вы пытаетесь сделать. Я предполагаю, что вы пытаетесь удалить папку, но хотите дать пользователю нормальное окно подтверждения и анимацию во время выполнения действия. Если это не правильно, пожалуйста, дайте мне знать, и я удалю этот ответ.

Несколько идей:

  • Вы можете вызвать каталог API Windows в вашем коде C ++, чтобы сделать это. Я считаю, что правильный вызов будет использовать IFileOperation (Vista и более поздние версии) или SHFileOperation (до Vista)
  • Qt уже имеет диалоговые окна сообщений. Хотя вы можете не получить точную такую ​​же функциональность, как у собственной оболочки, вы можете использовать это (QMessageBox :: warning), а затем удалить папку с помощью QDir. Это также будет кроссплатформенный портативный.
  • Если вы придерживаетесь VBScript, я сомневаюсь, что вы увидите какие-либо проблемы с производительностью, если это не вызывается много, много раз в цикле или что-то в этом роде. Вы знаете, старая «преждевременная оптимизация - корень всего зла».
0 голосов
/ 15 декабря 2011

Вы должны прочитать в интерфейсе IActiveScript COM. Вы можете создать экземпляр интерпретатора, который реализует IActiveScript, чтобы обеспечить среду выполнения для оценки сценариев. VBScript и JScript могут использоваться для этого, и ряд других сторонних языков сценариев также предоставляют поддержку IActiveScript.

Обзор для работы с этим заключается в том, что вы создаете языковую среду выполнения (например, экземпляр VBScript), а затем добавляете в нее некоторые пользовательские объекты. Как правило, если вы встраиваете интерпретатор в свое приложение, тогда лучше всего начать с представления объекта Application. Это может быть просто интерфейс IDispatch или что-то более конкретное с библиотекой типов, сгенерированной IDL, и всеми дополнениями. После добавления необходимых именованных элементов в среду выполнения вы загружаете один или несколько сценариев. Любые общедоступные функции или подпрограммы, объявленные в сценариях, теперь становятся доступными через интерфейс IDispatch оперативной среды выполнения, когда вы переключаете ее состояние в активное или работающее. Чтобы на самом деле запустить программу сценария, я вызываю функцию Main для своих вещей - вы можете выбрать другую схему, применимую к вашей среде.

Хорошая особенность ActiveScripting - это изменить язык, просто изменив CLSID времени выполнения. Поэтому, если люди предпочитают Perl, они могут использовать PerlScript или PythonScript и т. Д. Ваш объект Application остается прежним, поэтому вам не нужно писать дополнительный код для поддержки новых языков. Единственное требование, чтобы все было COM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...