Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> несколько процессов последовательно 
:(
    Опции темы
Black_Joker
  Дата 2.6.2005, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 9.11.2002
Где: Таганрог

Репутация: нет
Всего: нет



Подскажите, как можно запустить несколько процессов последовательно

Мне нужно открыть pdf-файл. Если просмотрщик не установлен, то установить и запустить pdf.

Я сделал, но не уверен в корректности.


Код

if FindExecutable('prezent.pdf', nil, str) < 32 then
begin
 shellExecute(Handle, 'open', 'acrobat.exe', nil, nil, SW_Restore);
 while FindExecutable('prezent.pdf', nil, str) < 32 do;
end;
shellExecute(Handle, nil, 'prezent.pdf', nil, nil, SW_Showmaximized);


Это сообщение отредактировал(а) Girder - 2.6.2005, 18:03
PM   Вверх
poor_yorik
Дата 2.6.2005, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 12.1.2005
Где: Общаги г. Киева

Репутация: нет
Всего: 8



Не уверен что данная строка будет устанавливать просмотрщик Adobe
shellExecute(Handle, 'open', 'acrobat.exe', nil, nil, SW_Restore);Она просто запустит программу Adobe Acrobat, но если просмотрщик pdf не настроен, то
строка shellExecute(Handle, nil, 'prezent.pdf', nil, nil, SW_Showmaximized); пахать не будет.
И совсем не понятно для чего предназначена строка
while FindExecutable('prezent.pdf', nil, str) < 32 do;
Прога же просто зависнет. Надо хотя бЫ вставить
while FindExecutable('prezent.pdf', nil, str) < 32 do Application.ProcessMessages; smile
--------------------
Семь раз отмерь, один раз - откомпиль.... Семь раз отпей, один раз - отлей... Семь раз отъешь, один раз - не жадничай и другим дай...
PM MAIL YIM   Вверх
Black_Joker
Дата 3.6.2005, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 9.11.2002
Где: Таганрог

Репутация: нет
Всего: нет



while FindExecutable('prezent.pdf', nil, str) < 32 do; - пауза.
Пока в системе не появится програма ассоциированняа с prezent.pdf
PM   Вверх
poor_yorik
Дата 3.6.2005, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 12.1.2005
Где: Общаги г. Киева

Репутация: нет
Всего: 8



Black Joker пойми, программа не будет обращаться к системе, пока не выполнит пустой цикл. Я пытался у себя это сделать. Там где не было просмотрщика, но был Acrobat, произошло зацикливание.
--------------------
Семь раз отмерь, один раз - откомпиль.... Семь раз отпей, один раз - отлей... Семь раз отъешь, один раз - не жадничай и другим дай...
PM MAIL YIM   Вверх
Marriage
Дата 6.6.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Цитата
Waits for the thread to terminate and then returns the value of the ReturnValue property.

function WaitFor: LongWord;

Description

Call WaitFor to obtain the value of ReturnValue when the thread finishes executing. WaitFor doesn't return until the thread terminates, so the thread must exit either by finishing the Execute method or by exiting when the Terminated property is True.
(Взято их HELPа для Delphi)


Это поможет ???

Это сообщение отредактировал(а) Marriage - 6.6.2005, 16:51


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Black_Joker
Дата 8.6.2005, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 9.11.2002
Где: Таганрог

Репутация: нет
Всего: нет



мне нужно
1. запустить новый процесс (инсталяху) и запомнить ее идентификатор
2. узнать когда процесс закончен (закончен / прерван)
3. открыть документ (pdf).


Как это сделать? smile

Это сообщение отредактировал(а) Black_Joker - 9.6.2005, 09:52
PM   Вверх
_hunter
Дата 8.6.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



1. CreateProcess() и смотрим PROCESS_INFORMATION
2. WaitForSingleObject()
3. не понял


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Black_Joker
Дата 9.6.2005, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 9.11.2002
Где: Таганрог

Репутация: нет
Всего: нет



Пример можно?
PM   Вверх
_hunter
Дата 9.6.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



пример -- ищем по форуму. темы и о запуске приложения и о ожидании его завершения уже не раз поднимались


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Girder
Дата 9.6.2005, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Код

uses ShellApi;

function InstAdobe(const Name:string):boolean;
var StartUpInfo:TStartupInfo;
    ProcessInfo:TProcessInformation;
    s:string;
begin
 Result:=false;
 FillChar(StartUpInfo,SizeOf(TStartUpInfo),0);
 StartUpInfo.cb:=SizeOf(TStartUpInfo);
 StartUpInfo.dwFlags:=STARTF_USESHOWWINDOW;
 StartUpInfo.wShowWindow:=SW_SHOW;
 s:=trim(Name);
 if CreateProcess(nil,PChar(s),nil,nil,false,NORMAL_PRIORITY_CLASS,nil,nil,StartUpInfo,ProcessInfo) then
  begin
   WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
   Result:=true;
   CloseHandle(ProcessInfo.hThread);
   CloseHandle(ProcessInfo.hProcess);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if ShellExecute(handle,'open','E:\dd.pdf',nil,nil,SW_SHOWNORMAL)=SE_ERR_NOASSOC then
  if InstAdobe('e:\install.exe') then ShellExecute(handle,'open','E:\dd.pdf',nil,nil,SW_SHOWNORMAL);
end;



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Black_Joker
Дата 10.6.2005, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 9.11.2002
Где: Таганрог

Репутация: нет
Всего: нет



Бльшое спасибо!
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0759 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.