Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Вниз

Запуск приложений 


Maxman   (2002-01-04 07:16) [0]

Как запустить приложение и подождать его завершения?
Заранее благодарен.



panov   (2002-01-04 07:25) [1]

см. FAQ



Dimaond Cat   (2002-01-05 03:25) [2]

procedure TForm1.Button1Click(Sender: TObject);
var
si : Tstartupinfo;
p : Tprocessinformation;
begin
FillChar( Si, SizeOf( Si ) , 0 );
with Si do begin
cb := SizeOf( Si);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;
Application.Minimize;
Createprocess(nil,"notepad.exe",nil,nil,false,Create_default_error_mode,nil,nil,si,p);
Waitforsingleobject(p.hProcess,infinite);
Application.Restore;
end;



dark   (2002-01-16 15:37) [3]

не запускencz приложения Word и Excel



Юрий Зотов   (2002-01-16 18:28) [4]

> Dimaond Cat

В коде есть лишнее, а вот освобождения хэндлов как раз и нет. Зачем гробить ресурсы системы?

procedure TForm1.Button1Click(Sender: TObject);
var
si: Tstartupinfo;
p: Tprocessinformation;
begin
FillChar(Si, SizeOf( Si ), 0);
Si.cb := SizeOf(Si);
if Createprocess(nil,"notepad.exe",nil,nil,false,0,nil,si,p) then
begin
CloseHandle(p.hThread);
Waitforsingleobject(p.hProcess,infinite);
CloseHandle(p.hProcess)
end
end;

Так, думаю получше будет. Только выполнять этот код надо в дополнительном потоке, чтобы не создавался эффект "зависания" программы.



> dark

Это вряд ли... А если и правда не запускает, то причина не в этом коде, а в том, как он используется.



Slava   (2002-01-17 08:25) [5]

А вот другой вопрос:

Как дождаться завершения редактирования Word"овского (Word2000) документа, если перед этим Word был уже запущен ?

Дело в том, что Word2000 создает только один процесс для всех документов (чего не происходит, например с Excel2000) и GetExitCodeProcess возвращает 0, а WaitForSingleObject"у вообще все по барабану и ничего он не ждет :((((



nikkie   (2002-01-17 09:30) [6]

>Slava
думается с word и excel имеет смысл работать через COM. в Word и Excel (и 97, и 2000) есть события OnClose, OnBeforeClose.



Slava   (2002-01-17 09:46) [7]

Дело в том, что все документы хранятся в базе.
А они могут быть не только Word или Excel, а текстовыми,
картинками, вообще всем, что угодно и программы, с ними связанные
могут не являться COM-серверами. А хотелось бы работать со всеми
однообразно:

Выгрузил документ на диск в файл, отредактировал, закрыл, загрузил обратно в табличку.



Андрей Сенченко   (2002-01-17 12:45) [8]

> Юрий Зотов © (16.01.02 18:28)
>> dark
>> не запускаются приложения Word и Excel

Это вряд ли... А если и правда не запускает, то причина не в этом коде, а в том, как он используется.

Дело в том, что действительно не запускаются, если написать вот так:
( основа взята из FAQ )
var
si:STARTUPINFO;
pi:PROCESS_INFORMATION;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
if not CreateProcess( "Excel.exe", // Module name.
nil, // No command line.
nil, // Process handle not inheritable.
nil, // Thread handle not inheritable.
False, // Set handle inheritance to FALSE.
0, // No creation flags.
nil, // Use parent"s environment block.
nil, // Use parent"s starting directory.
si, // Pointer to STARTUPINFO structure.
pi ) // Pointer to PROCESS_INFORMATION structure.
then
begin
ShowMessage( "CreateProcess failed." );
Exit;
end;
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
ShowMessage("Done !");
end;

Так как запуск приложения происходит отнюдь не из директории Мелкософот Офиса. Кстати я тоже не смог побороть эту проблему никак кроме предварительного поиска EXCEL и WORD на диске ( при инициализации программы ) и прошивки их пуией в переменные среды.

Может посоветуете более простой путь ?



panov   (2002-01-17 13:53) [9]

Можно воспользоваться ключом реестра(это в NT):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe



Dimaond Cat   (2002-01-17 23:21) [10]

2 Юрий Зотов, ничего особо лишнего не заметил, на счет хендлов ты прав (забыл написать) , на счет "зависания" программы надо подумать мне кажется что она не должна "виснуть", даже при выполнении из своего потока, ожидание завершения другого процесса не есть отказ от обработки сообщений, если не прав то ткни меня ногой (правой) :о)




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.021 c
3-57325           Yuri Btr              2002-02-19 09:45  2002.03.18  
Скорость запросов???


6-57486           SynteZZZ              2001-12-30 05:32  2002.03.18  
Небольшой вопрос...


4-57555           Shizik                2002-01-19 13:04  2002.03.18  
Очень нужна помощь!!!!


3-57296           DimaIv                2002-02-17 08:07  2002.03.18  
Почему когда я прошу в Edit вставить число из записи в


14-57512          chernoruk             2002-02-04 18:35  2002.03.18  
Connect to the Internet