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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2012, 18:57   #1
Mr.karpiks
Пользователь
 
Регистрация: 18.03.2012
Сообщений: 11
По умолчанию Запуск и остановка дочерней программы?

Добрый вечер, у меня такой вопросик. Я использую для запуска дочерней программы вот эту функцию
Код:
function ExecAndWait(const FileName,
                     Params: ShortString;
                     const WinState: Word): boolean; export;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: ShortString;
begin
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
  begin
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WinState;
  end; //Result :=
  CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo);
end;
А как остановить программу с параметром? Помогите пожалуйста. Заранее спасибо!
Mr.karpiks вне форума Ответить с цитированием
Старый 10.08.2012, 19:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Так же как и программу без параметра - TerminateProcess(), с параметром хендла процесса из структуры ProcInfo (может быть даже CloseHandle(), но тут не ручаюсь)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2012, 19:08   #3
Mr.karpiks
Пользователь
 
Регистрация: 18.03.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Так же как и программу без параметра - TerminateProcess(), с параметром хендла процесса из структуры ProcInfo (может быть даже CloseHandle(), но тут не ручаюсь)
Можешь пример привести пожалуйста!
Mr.karpiks вне форума Ответить с цитированием
Старый 10.08.2012, 19:20   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
TerminateProcess(ProcInfo.hProcess,0);
и усе.

кстати в вашем примере обязательно закрывать хендлы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.08.2012, 20:12   #5
Mr.karpiks
Пользователь
 
Регистрация: 18.03.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
TerminateProcess(ProcInfo.hProcess,0);
и усе.

кстати в вашем примере обязательно закрывать хендлы.
Исправь если что не так!

Код:
function TElsCpfm.ExecAndWait(const FileName,
                     Params: ShortString;
                     const WinState: Word): boolean; export;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: ShortString;
begin
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
  begin
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WinState;
  end; //Result :=
  CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo);
 TerminateProcess(ProcInfo.hProcess,0);
  { Закрываем Handles!}
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;}
end;
Да и ещё есть какой не будь другой, более проще. Запуск и остановка программ с параметрами из delphi?
Mr.karpiks вне форума Ответить с цитированием
Старый 10.08.2012, 20:28   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да так, тока у вас энд один лишний.
PS: а смысл запустить и мгновенно закрыть приложение.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.08.2012, 20:31   #7
Mr.karpiks
Пользователь
 
Регистрация: 18.03.2012
Сообщений: 11
По умолчанию

Мне нужна функция или пример для закрытия программы с параметрами!
Mr.karpiks вне форума Ответить с цитированием
Старый 10.08.2012, 20:49   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

он у вас есть, разницы нет между приложением запущенным с параметрами и без.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.08.2012, 21:09   #9
Mr.karpiks
Пользователь
 
Регистрация: 18.03.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
он у вас есть, разницы нет между приложением запущенным с параметрами и без.
Код:
procedure Form1.BtnAllStartClick(Sender: TObject);
begin
{Запускаем!}
ExecAndWait('notepad.exe',
                    'Тут параметры', SW_HIDE)
end;
А если я хочу остановить то как мне сделать
Код:
procedure Form1.BtnAllStopClick(Sender: TObject);
begin
{Останавливаем!}
Что тут писать!
end;
Mr.karpiks вне форума Ответить с цитированием
Старый 10.08.2012, 21:41   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Как минимум код автора - бред.
1. Зачем создавать процесс а потом его уничтожать?
2. код автора ни разу не ждет завершения. Если бы ждал, программа отмирала на месте, пока не умрет запущенное функцией ПО.

решением будут потоки. Запуск и ожидание завершения процесса - обсуждалось тысячу раз.
Человек_Борща вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы из под другой программы fomikadze Общие вопросы C/C++ 8 13.06.2011 14:47
Остановка программы на определенное количество времени. AIR_3 Помощь студентам 2 02.06.2011 02:52
запуск программы dampirik Общие вопросы .NET 2 02.01.2011 12:38
Запуск программы на выполнение из другой программы. ViNcHeStEr Паскаль, Turbo Pascal, PascalABC.NET 6 18.06.2008 14:33
Управление потоками. Запуск, остановка, приоритет потока. metamfetamin Помощь студентам 5 11.11.2007 12:45