Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2015, 21:23   #21
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Что возвращает CreateProcess?
Что возвращает GetLastError() после него?
CreateProcess TRUE возвращает., та щас не вылетает, но ниче в переменную не получаю, сделал так
Код:
STARTUPINFO si;
    PROCESS_INFORMATION pi;

	si.dwFlags=STARTF_USESTDHANDLES;
	wchar_t* str=new wchar_t[100];
	si.hStdOutput=&str;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );
	

	if (CreateProcess(L"recognition.exe",L"img.png",
		NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)==TRUE)
	{
		
		Sleep(2000);				// подождать
		//TerminateProcess(pi.hProcess,NO_ERROR);	// убрать процесс
		AfxMessageBox(str);
		AfxMessageBox((wchar_t*)si.hStdOutput);
		WaitForSingleObject( pi.hProcess, INFINITE );
		CloseHandle( pi.hProcess );
		CloseHandle( pi.hThread );
	}
Вроде то что в консоле должно быть не выводится. Нужно получить то что в консоль идет, а ниче не выводится.
ninja2 вне форума Ответить с цитированием
Старый 30.08.2015, 21:58   #22
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нужно получить то что в консоль идет
Так это тебе нужно через Pipe решать. Есть пример на Делфи. Кинуть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.08.2015, 22:10   #23
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Так это тебе нужно через Pipe решать. Есть пример на Делфи. Кинуть?
Я уже нашел пример на С++, тут. Ниче не выходит все рамно

Получилось получить, но почему то консоль вызывается без параметра img.png, вроде в коде передаю параметр
Код:
  if (!CreateProcess(L"recognition.exe",L"img.png",NULL,NULL,TRUE,CREATE_NEW_CONSOLE,
                     NULL,NULL,&si,&pi))
  {
А возвращается значение что типо параметр не передан, как передать параметр, должен быть вызов recognition.exe img.png ????, как так сделать????

Последний раз редактировалось Stilet; 30.08.2015 в 22:45.
ninja2 вне форума Ответить с цитированием
Старый 30.08.2015, 22:46   #24
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Слить его в переменку, и передать в первый параметр.
Код:
if (!CreateProcess(L"recognition.exe img.png",NULL...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2015, 08:57   #25
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
но ниче в переменную не получаю, сделал так
Вас, я вижу, совершенно не смущает, что вы вместо требуемого хендла передает указатель?..
https://msdn.microsoft.com/en-us/lib...8VS.85%29.aspx
p51x вне форума Ответить с цитированием
Старый 31.08.2015, 09:28   #26
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

От так запускается, нужно указывать имя модуля потому что argv[0] равняется имени модуля в С программах
Код:
if (!CreateProcess(L"recognition.exe",L"recognition.exe img.png",NULL,NULL,TRUE,HIGH_PRIORITY_CLASS,
                     NULL,NULL,&si,&pi))
Пишут еще что
Цитата:
Если lpApplicationName является NULL, первый белый, разделенных пробелами знак в командной строке указывается имя модуля. Если вы используете длинное имя файла, который содержит пространство, использование кавычках, чтобы указать, где имя файла заканчивается, и начинаются аргументы (см объяснение lpApplicationName параметра). Если имя файла не содержит расширения, .exe добавляется. Поэтому, если расширение имени файла .com, этот параметр должен включать в себя расширение .com. Если имя файла оканчивается на точку (.) Без расширения, или если имя файла содержит путь, .exe не добавляется. Если имя файла не содержит путь к каталогу, система ищет исполняемый файл в следующей последовательности:
И типо можно запустить как то так
Код:
if (!CreateProcess(NULL,L"recognition.exe img.png",NULL,NULL,TRUE,HIGH_PRIORITY_CLASS,
                     NULL,NULL,&si,&pi))
Но у меня исклчение вылазит, как запустить если первый параметр будет равно NULL???

Последний раз редактировалось Stilet; 31.08.2015 в 09:45.
ninja2 вне форума Ответить с цитированием
Старый 31.08.2015, 10:23   #27
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

А вы сходите по ссылке и увидите там
Код:
   bSuccess = CreateProcess(NULL, 
      szCmdline,     // command line 
      NULL,          // process security attributes 
      NULL,          // primary thread security attributes 
      TRUE,          // handles are inherited 
      0,             // creation flags 
      NULL,          // use parent's environment 
      NULL,          // use parent's current directory 
      &siStartInfo,  // STARTUPINFO pointer 
      &piProcInfo);  // receives PROCESS_INFORMATION
p51x вне форума Ответить с цитированием
Старый 31.08.2015, 20:32   #28
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Так в Visual'е вроде popen есть...
https://msdn.microsoft.com/en-us/library/aa298534.aspx
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделить память под строку и записать в нее данные marenko.lilia Помощь студентам 3 22.08.2014 11:31
Получить HInstance DLL имея под рукой только форму из нее it-webwork Общие вопросы Delphi 1 18.03.2013 14:36
Как получить данные с чужой программы в свою? pepesina Общие вопросы Delphi 21 13.07.2012 16:24
Как запустить образ ISO из под DOS m1rinat Компьютерное железо 1 04.10.2009 10:05