1

Тема: Як відкрити програмно зовнішній vbs скрипт на компі? Працюю з QT c++

Я пробував 2 способи:

QProcess *vec = new QProcess(this);
        vec->startDetached("F:\\anki\\ManyErr.vbs");
  

і такий:

WinExec( "F:\\anki\\ManyErr.vbs", 1);

Обидва працюють, але проблема в тому, що таким способом відкриваються тільки exe-шніки, а не vbs файли(.
Є якісь варіанти вирішення проблеми?

2 Востаннє редагувалося leofun01 (26.05.2019 11:35:29)

Re: Як відкрити програмно зовнішній vbs скрипт на компі? Працюю з QT c++

Сам *.vbs файл це лише скріпт, який інтерпритується іншою програмою:
%WinDir%\System32\сscript.exe
або
%WinDir%\System32\wscript.exe

Пробуйте WinExec("%WinDir%\\System32\\сscript.exe \"path\\script.vbs\"", 1);

Подякували: Raikoho1

3

Re: Як відкрити програмно зовнішній vbs скрипт на компі? Працюю з QT c++

leofun01 написав:

Сам *.vbs файл це лише скріпт, який інтерпритується іншою програмою:
%WinDir%\System32\сscript.exe
або
%WinDir%\System32\wscript.exe

Пробуйте WinExec("%WinDir%\\System32\\сscript.exe \"path\\script.vbs\"", 1);

Шикос, дякую

4

Re: Як відкрити програмно зовнішній vbs скрипт на компі? Працюю з QT c++

Дуже раджу читати документацію:
https://doc.qt.io/qt-5/qprocess.html#startDetached

bool QProcess::startDetached(qint64 *pid = nullptr)
...
If the function is successful then *pid is set to the process identifier of the started process.

https://docs.microsoft.com/uk-ua/window … se-winexec

Note  This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.

Тобто або (Qt)

QProcess *vec = new QProcess(this);
vec->setProgram("%WinDir%\\System32\\сscript.exe");
vec->setArguments("F:\\anki\\ManyErr.vbs");
int pid;
bool started = vec->startDetached(&pid);

або (WinAPI)

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
BOOL started = CreateProcess(NULL, "F:\\anki\\ManyErr.vbs", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

або навіть (C++ standard)

std::system("start F:\\anki\\ManyErr.vbs");
Подякували: leofun011