Показать полную графическую версию : [решено] запуск программы с параметрами и ожидание ее закрытия
muslimdogger
21-08-2015, 20:41
при втором условии ожидается код на запуск exe c параметрами, понял что нужно делать через CreateProcess, но никак не могу написать это. не могли бы вы помочь?
function ExecAndWait(const aFilename: string; const AParams: string = ''; const AWndState:
Boolean = False; const ADir: string = ''): Boolean;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
begin
FillChar(StartInfo, SizeOf(StartInfo), 0);
FillChar(ProcInfo, SizeOf(ProcInfo), 0);
StartInfo.cb := SizeOf(StartInfo);
// показывать окно используя настройки параметра wShowWindow и курсор в форме песочных часов 2 секунды
StartInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
// отображение окна выполнения
if AWndState = True then
StartInfo.wShowWindow := SW_SHOWNORMAL
else
StartInfo.wShowWindow := SW_HIDE;
// форматирование командной строки с обрамлением двойными кавычками имени файла
CmdLine := Format('"%s" %s', [aFilename, AParams]);
// после вызова процедуры на строку CmdLine будет ссылаться только один указатель
{$IFDEF UNICODE}
UniqueString(CmdLine); // передаем CmdLine как уникальную строку
{$ENDIF}
//** обрабатывать ошибки вызова функции (Win32Check)
{$WARN SYMBOL_PLATFORM OFF}
result := Win32Check(CreateProcessW(PChar(aFilename), PChar(CmdLine), nil, nil, False,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PChar(ADir), StartInfo, ProcInfo));
{$WARN SYMBOL_PLATFORM ON}
if result then
begin
while WaitForSingleObject(ProcInfo.hProcess, 100) <> WAIT_OBJECT_0 do
Application.ProcessMessages;
//** обрабатывать ошибки вызова функции (Win32Check)
{$WARN SYMBOL_PLATFORM OFF}
Win32Check(CloseHandle(ProcInfo.hProcess));
Win32Check(CloseHandle(ProcInfo.hThread));
{$WARN SYMBOL_PLATFORM ON}
end;
end;
{** функция Win32Check конвертирует код ошибки в исключение. Т.е. при возбуждение
исключения код дальше будет пропущен, а управление будет передано на ближайший обработчик
ошибок, по умолчанию это объект Application. Функцию обернем директивой ($WARN SYMBOL_PLATFORM)
для подавления сообщения о специфической платформе этой функции}
В код добавлена обработка ошибок при вызове функции.
По большому счету, необходимо еще две функции - проверять валидность имени файла и получение полного пути к текущему командному процессору!
Да, в наше время с детства учили быть вежливыми, в части Спасибо и Пожалуйста!
muslimdogger
24-08-2015, 23:20
opel431 спасибо за то что отозвались. я в тему давно не заглядывал, тк отметил ее решенной и забыл
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.