Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Рабочий стол
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.12.2011, 15:26
vadim-narochnyi vadim-narochnyi вне форума
Прохожий
 
Регистрация: 24.12.2011
Сообщения: 9
Репутация: 10
Вопрос Проверить строку на выполненность

Привет. Хочу перезагрузить exploler.exe
Код:
WinExec ('taskkill /f /im explorer.exe', sw_hide)
WinExec ('explorer.exe', sw_hide);

первая команда убивает его, а вторая запускает, но они срабатывают одновременно. Как сделать чтобы сначала сработала первая, а потом вторая! Через условие, но как проверить строку на выполненность?
Спасибо! Жду ответа!
Ответить с цитированием
  #2  
Старый 24.12.2011, 16:12
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Не знаю, где и как сейчас учат программированию, но вообще-то обычный процессор (который стоит в PC) никогда не выполняет инструкции одновременно (тем более функции). Выполняется сначала одна, потом другая. Всегда обе и всегда в том порядке, в каком они написаны. Другое дело, что TaskKill скорее всего не успеет выключить процесс. Решение "в лоб" - добавить между командами Sleep(N); где N - порядка 1000. Решение похитрее - ждать завершения работы TaskKill. А решение третье, ИМХО более адекватное - TerminateProcess. Правда тут надо уже уметь работать с WinAPI.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 24.12.2011 в 16:19.
Ответить с цитированием
  #3  
Старый 24.12.2011, 16:22
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию

Ф-я dwExecAndWait запускает процесс и ждет его завершения (из dwUnits).
Используй вместо WinExec.
Код:
procedure dwProcessMessages;
var
  Msg: TMsg;
begin
  while PeekMessage(Msg, GetCurrentProcess, 0, 0, PM_REMOVE) do
    //if not IsDialogMessage(Dlg, Msg) then
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
end;

procedure dwExecAndWait(const FileName, Params: String; const CmdShow: Integer);
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize := SizeOf(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := GetActiveWindow();
    ExInfo.lpVerb := 'open';
    ExInfo.lpParameters := PChar(Params);
    lpFile := PChar(FileName);
    nShow := CmdShow;
  end;
  if ShellExecuteEx(@exInfo) then
    Ph := exInfo.HProcess
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;
  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    dwProcessMessages;
  CloseHandle(Ph);
end;
Ответить с цитированием
  #4  
Старый 24.12.2011, 20:34
vadim-narochnyi vadim-narochnyi вне форума
Прохожий
 
Регистрация: 24.12.2011
Сообщения: 9
Репутация: 10
По умолчанию

Да, пока ещё не учат, я сам пытаюсь разобраться, и не нужно глумиться, все мы чему-то учимся первый раз! Но за критику спасибо!
Ответить с цитированием
  #5  
Старый 24.12.2011, 20:49
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Я не глумлюсь. Я просто считаю, что прежде чем браться писать программы (ну кроме разве что "Hello, world!"), нужно изучить устройство и принципы работы компьютера, хотя бы примерно. А то программирование может стать вида "Ну вот я написал такую строчку и подключил такой компонент, вот оно должно за меня все сделать", в то время как должно целиком и полностью состоять из осмысленных действий. Я исключительно доброжелателен.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter