|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проверить строку на выполненность
Привет. Хочу перезагрузить exploler.exe
Код:
WinExec ('taskkill /f /im explorer.exe', sw_hide) WinExec ('explorer.exe', sw_hide); первая команда убивает его, а вторая запускает, но они срабатывают одновременно. Как сделать чтобы сначала сработала первая, а потом вторая! Через условие, но как проверить строку на выполненность? Спасибо! Жду ответа! |
#2
|
||||
|
||||
Не знаю, где и как сейчас учат программированию, но вообще-то обычный процессор (который стоит в PC) никогда не выполняет инструкции одновременно (тем более функции). Выполняется сначала одна, потом другая. Всегда обе и всегда в том порядке, в каком они написаны. Другое дело, что TaskKill скорее всего не успеет выключить процесс. Решение "в лоб" - добавить между командами Sleep(N); где N - порядка 1000. Решение похитрее - ждать завершения работы TaskKill. А решение третье, ИМХО более адекватное - TerminateProcess. Правда тут надо уже уметь работать с WinAPI.
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 24.12.2011 в 16:19. |
#3
|
|||
|
|||
Ф-я 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
|
|||
|
|||
Да, пока ещё не учат, я сам пытаюсь разобраться, и не нужно глумиться, все мы чему-то учимся первый раз! Но за критику спасибо!
|
#5
|
||||
|
||||
Я не глумлюсь. Я просто считаю, что прежде чем браться писать программы (ну кроме разве что "Hello, world!"), нужно изучить устройство и принципы работы компьютера, хотя бы примерно. А то программирование может стать вида "Ну вот я написал такую строчку и подключил такой компонент, вот оно должно за меня все сделать", в то время как должно целиком и полностью состоять из осмысленных действий. Я исключительно доброжелателен.
jmp $ ; Happy End! The Cake Is A Lie. |