Форум: "WinAPI";
Текущий архив: 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 Юрий Зотов, ничего особо лишнего не заметил, на счет хендлов ты прав (забыл написать) , на счет "зависания" программы надо подумать мне кажется что она не должна "виснуть", даже при выполнении из своего потока, ожидание завершения другого процесса не есть отказ от обработки сообщений, если не прав то ткни меня ногой (правой) :о)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c