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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2007, 17:23   #1
il76
 
Регистрация: 05.07.2007
Сообщений: 5
По умолчанию Как запустить приложение, дождаться его исполнения и только потом выполнять код?

Функция shellExecute() запускает и пошло дальше выполнять код, а мне надо модально, ятобы дождаться пока приложение исполниться, а потом идти дальше по коду.
il76 вне форума Ответить с цитированием
Старый 18.07.2007, 17:26   #2
Net
;-)
Пользователь
 
Регистрация: 18.07.2007
Сообщений: 69
По умолчанию

Это часто задаваемый вопрос. Яндекс на раз два.

Код:
Uses
  ..., ShellAPI;

procedure StartAndWait( Name: PChar );
var
  ProcInfo: PShellExecuteInfo;
begin
   GetMem( ProcInfo, SizeOf( ProcInfo^ ) );
   with ProcInfo^ do begin
      Wnd := Application.Handle;
      cbSize := SizeOf( ProcInfo^ );
      lpFile := PChar( Name );
      lpParameters := nil;
      lpVerb := 'open';
      nShow := SW_SHOW;
      fMask := SEE_MASK_DOENVSUBST or SEE_MASK_NOCLOSEPROCESS;
   end;
   try
      Win32check( ShellExecuteEx( ProcInfo ) );
      while not Application.Terminated and
      ( WaitForSingleObject( ProcInfo.hProcess, 100 ) = WAIT_TIMEOUT ) do
        Application.ProcessMessages;
   finally
      if ProcInfo.hProcess <> 0 then
         CloseHandle( ProcInfo.hProcess );
      Dispose( ProcInfo );
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   ( Sender as TControl ).Enabled := false;
   StartAndWait( 'notepad.exe' );
   ( Sender as TControl ).Enabled := true;
end;
Net вне форума Ответить с цитированием
Старый 18.07.2007, 18:01   #3
il76
 
Регистрация: 05.07.2007
Сообщений: 5
По умолчанию

Спасибо попробую
il76 вне форума Ответить с цитированием
Старый 18.07.2007, 19:55   #4
il76
 
Регистрация: 05.07.2007
Сообщений: 5
По умолчанию

Вызывает ошибку времени выполнения: Aксесс виолейшон в адресе ....
Я это правда сделал в самописной процедуре и ( Sender as TControl ).Enabled := false; эти вещи не делал т. к. там нет Sender
il76 вне форума Ответить с цитированием
Старый 18.07.2007, 20:09   #5
il76
 
Регистрация: 05.07.2007
Сообщений: 5
По умолчанию

Передал Sender из таймера все также сделал, пишет во время выполнения: invalid class typecast
il76 вне форума Ответить с цитированием
Старый 18.07.2007, 20:59   #6
Net
;-)
Пользователь
 
Регистрация: 18.07.2007
Сообщений: 69
По умолчанию

Покажите код.
Конкретно эта процедура работает без проблем.
Net вне форума Ответить с цитированием
Старый 19.07.2007, 14:00   #7
il76
 
Регистрация: 05.07.2007
Сообщений: 5
По умолчанию

procedure Obmen(Sender: TObject);
var atr : integer;
.....
....
ProcInfo: PShellExecuteInfo;//
begin
....
....
//Запускаем загрузку 1С
// ComStr:=Pchar(Kat+'set\ExchangeIn.c md');
// shellExecute(F1.handle,'open',ComSt r,nil,nil,tipZapuska);
GetMem( ProcInfo, SizeOf( ProcInfo^ ) );
with ProcInfo^ do begin
Wnd := Application.Handle;
cbSize := SizeOf( ProcInfo^ );
lpFile := PChar(Kat+'set\ExchangeIn.cmd');
lpParameters := nil;
lpVerb := 'open';
nShow := SW_SHOW;
fMask := SEE_MASK_DOENVSUBST or SEE_MASK_NOCLOSEPROCESS;
end;
try
Win32check( ShellExecuteEx( ProcInfo ) );
while not Application.Terminated and
( WaitForSingleObject( ProcInfo.hProcess, 100 ) = WAIT_TIMEOUT ) do
Application.ProcessMessages;
finally
if ProcInfo.hProcess <> 0 then
CloseHandle( ProcInfo.hProcess );
Dispose( ProcInfo );
end;
.....
.....
Может в версии Delphi дело у меня 5
il76 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показываем объект и только потом работаем дальше celovec Общие вопросы Delphi 7 25.03.2008 15:28
начал учить только-только - нужна ваша помошь vanDJ Помощь студентам 20 18.12.2007 21:53
как запустить приложение из к примеру текст файла!!! Volkogriz Общие вопросы Delphi 12 12.10.2007 12:27