wxExecute первый аргумент команды Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
AntonyTony
Earned a small fee
Earned a small fee
Posts: 11
Joined: Tue Jan 28, 2020 10:03 am

wxExecute первый аргумент команды

Post by AntonyTony » Tue Apr 21, 2020 11:20 am

Как можно запустить .exe с аргументами команды?

Хорошо работает через wxExecute, но первый аргумент всегда равен названию приложения.

Code: Select all

	wxExecute("test.exe 4 72 54", wxEXEC_ASYNC);
Есть ли ещё способы открыть приложение и первый аргумент был равен 4 и т.д.
Пробовал делать через wxProcess::Open(), успехом не увенчался.

User avatar
T-Rex
Moderator
Moderator
Posts: 1198
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Re: wxExecute первый аргумент команды

Post by T-Rex » Tue Apr 21, 2020 11:30 am

Это стандартное поведение. В argv всегда первым аргументом приходит имя приложения.

AntonyTony
Earned a small fee
Earned a small fee
Posts: 11
Joined: Tue Jan 28, 2020 10:03 am

Re: wxExecute первый аргумент команды

Post by AntonyTony » Tue Apr 21, 2020 11:51 am

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, просто вопрос интересен

User avatar
T-Rex
Moderator
Moderator
Posts: 1198
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Re: wxExecute первый аргумент команды

Post by T-Rex » Tue Apr 21, 2020 12:50 pm

Ну, 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;
}

Post Reply