Консольные приложения
От: AlexOOO_HOME  
Дата: 27.02.02 01:34
Оценка:
Имеется консольная программа которая вызывается из моего приложения с
помощью ShellExecute(аля параметры)тут все ОК,
после отработки закрываю с помощью функции
PostMessage(FindWindow(NULL,"ляляля"),WM_QUIT,0,0)вроде тоже все ОК.
Но потом начинаются приколы, то винды упадут, то начинают виснуть открытые программы.А делов то необходимо запустить дос программу и после ее отработки закрыть, после чего обработать результат работы дос — программы.
Вопрос- что я делаю не так, в чем ошибка хотя где и в чем здесь ошибиться...
Re: Консольные приложения
От: konst  
Дата: 27.02.02 07:44
Оценка:
DOS-программку можно запускать не только шелл-экзэкьютом, но и при помощи CreateProcess, так получешь хэндлы её процесса и главного потока. Вот какой вариант могу предложить (эти цифры -200 с чем-то, не обращай на них внимания, просто так вот уж получилось :) ):
memset(&si, 0, sizeof(si));
si.cb = sizeof(STARTUPINFO);
if( fHideWnd )
{
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
}
if( !CreateProcess(NULL, (LPSTR)path, NULL,NULL,TRUE, CREATE_NO_WINDOW|NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi) )
return -201;
if( (ret=WaitForSingleObject(pi.hProcess, 1800000)) == WAIT_TIMEOUT ) return -202;
else if(ret != WAIT_OBJECT_0 ) ret = (DWORD)-202; else ret = 0;
if(!GetExitCodeProcess(pi.hProcess, &ret))
return -203;
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return ret;

тут есть только непонятная переменна "path", вот что это
для НТ: cmd /c <имя дос-программы и её параметры>
для 9Х: command.com /c <имя дос-программы и её параметры>
если это консольное приложение, то, конечно, никаких "cmd" не надо
Re[2]: Консольные приложения
От: Bill Fortnum  
Дата: 27.02.02 08:54
Оценка:
K>if( !CreateProcess(NULL, (LPSTR)path, NULL,NULL,TRUE, CREATE_NO_WINDOW|NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi) )


Что такое CREATE_NO_WINDOW?

fortnum@mail.ru
Re[3]: Консольные приложения
От: konst  
Дата: 27.02.02 12:15
Оценка:
CREATE_NO_WINDOW — при запуске консольного приложения окно консольное не открывает и не показывает в НТ (но в 9Х не работает, там чуть выше окно прячется в 9Х), в хелпе (мсдн) написано, что для дос-программ этот флаг не работает, так что получается он и никчему, действительно, ну, просто остался вот...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.