Форум: "WinAPI";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизЗапуск внешней проги Найти похожие ветки
← →
Амир (2004-02-07 10:17) [0]Как запустить прогу и подождать пок аона завершится?
← →
Alexander666 © (2004-02-07 10:27) [1]Он довольно популярно растолкован в каждом делфийском факе в Инете.
← →
}{enon © (2004-02-07 10:29) [2]Результат функции ShellExecute - это handle проги. Запускаешь ее, а потом ждешь, пока такое приложении перестанет существовать (IsWindow). Правда может не сработать с DOS-приложениями.
← →
Alexander666 © (2004-02-07 10:38) [3]Нуно CreateProcess и WaitForInputIdle.
← →
akvilon © (2004-02-07 15:27) [4]Не WaitForInputIdle, а скорее WaitForSingleObject
← →
akvilon © (2004-02-07 15:27) [5]Не WaitForInputIdle, а скорее WaitForSingleObject
← →
Nomolos © (2004-02-07 20:17) [6]А лучше почитать библию дяди Рихтера. Он расскажет не только как, но и почему :)
← →
Амир (2004-02-08 11:35) [7]Ну поюзал я CreateProcess (в Faq пример быд). А вот как перехватить данные которые он пихает, то есть я запускаю коснольную прогу, и она все выводит в косноль, как можно это получить проге?
← →
димка (2004-02-08 17:22) [8]function ExecuteFileTm(FileName:string):boolean;
var
Res:LongBool;
PIn:PROCESS_INFORMATION;
params:string;
SII:STARTUPINFO;
RetCode:cardinal;
CreationsFlags:cardinal;
begin
params:="";
try
CreationsFlags:=CREATE_DEFAULT_ERROR_MODE or normal_PRIORITY_CLASS
or CREATE_UNICODE_ENVIRONMENT;
//CreationsFlags:=CREATE_DEFAULT_ERROR_MODE or CREATE_NO_WINDOW
// or NORMAL_PRIORITY_CLASS
// or CREATE_UNICODE_ENVIRONMENT;
getstartupinfo(SII);
Res:=createprocess(
pchar(FileName),
pchar(Params),
nil,
nil,
True,
CreationsFlags,
nil,
pchar(extractfilepath(FileName)),
SII,
PIn);
except
CloseHandle(Pin.hProcess);
ExecuteFileTm:=False;
exit;
end;
if not Res then
begin
CloseHandle(Pin.hProcess);
ExecuteFileTm:=False;
exit;
end;
RetCode:=STILL_ACTIVE;
while (RetCode=STILL_ACTIVE)do
begin
try
GetExitCodeProcess(Pin.hProcess,RetCode);
except
CloseHandle(Pin.hProcess);
ExecuteFileTm:=False;
exit;
end;
Sleep(10);
end;
CloseHandle(Pin.hProcess);
ExecuteFileTm:=True;
end;
← →
Амир (2004-02-08 18:26) [9]И что это было? Если запуск, то я чуть проще сделал, а вот как перехватить данные из консольки?
Вот как я сделал:
procedure Run(cmdline:String);
var si:STARTUPINFO;
pi:PROCESS_INFORMATION;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
si.wShowWindow:=SW_HIDE;
si.dwFlags:=STARTF_USESHOWWINDOW;
if not CreateProcess( nil, // No module name (use command line).
PChar(cmdline), // Command line.
nil, // Process handle not inheritable.
nil, // Thread handle not inheritable.
False, // Set handle inheritance to FALSE.
0, // No creation flags.
nil, // Use parent"s environment block.
nil, // Use parent"s starting directory.
si, // Pointer to STARTUPINFO structure.
pi ) // Pointer to PROCESS_INFORMATION structure.
then
begin
ShowMessage( "blitzcc not found" );
Exit;
end;
while WaitForSingleObject(pi.hProcess,100)=WAIT_TIMEOUT do
begin
Application.ProcessMessages;
end;
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
// ShowMessage("Done !");
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c