Page 1 of 1
wxExecute первый аргумент команды
Posted: Tue Apr 21, 2020 11:20 am
by AntonyTony
Как можно запустить .exe с аргументами команды?
Хорошо работает через wxExecute, но первый аргумент всегда равен названию приложения.
Code: Select all
wxExecute("test.exe 4 72 54", wxEXEC_ASYNC);
Есть ли ещё способы открыть приложение и первый аргумент был равен 4 и т.д.
Пробовал делать через wxProcess::Open(), успехом не увенчался.
Re: wxExecute первый аргумент команды
Posted: Tue Apr 21, 2020 11:30 am
by T-Rex
Это
стандартное поведение. В argv всегда первым аргументом приходит имя приложения.
Re: wxExecute первый аргумент команды
Posted: Tue Apr 21, 2020 11:51 am
by AntonyTony
T-Rex, Спасибо)
Тогда есть ли аналог CreateProcess на wx?
К примеру, я создаю процесс через стандартные методы WinAPI:
Code: Select all
::CreateProcess( "test.exe", "4 72 54", NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &StartInfo, &ProcInfo)
и в другом приложении получаю указатель на командную строку ( lpCmdLine ):
Code: Select all
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
P.S. Вполне справлюсь и с wxExecute, просто вопрос интересен
Re: wxExecute первый аргумент команды
Posted: Tue Apr 21, 2020 12:50 pm
by T-Rex
Ну, wxExecute, как я понимаю, внутри и работает через CreateProcess, там же WinAPI внутри, а не магия.
Вот, два варианта дают более-менее схожие результаты:
Code: Select all
STARTUPINFO StartInfo = { sizeof(StartInfo) };
PROCESS_INFORMATION ProcInfo;
TCHAR arguments[] = L"test.exe 3 4 5";
wchar_t command[] = L"test.exe";
wchar_t args[] = L"3 4 5";
wchar_t* params[] = { command, args, nullptr };
wxExecute(params);
::CreateProcess(L"test.exe", arguments, NULL, NULL, false,
NORMAL_PRIORITY_CLASS, NULL, NULL, &StartInfo, &ProcInfo);
С тестовым приложением:
Code: Select all
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
MessageBox(NULL, lpCmdLine, NULL, 0);
return 0;
}