Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-57398
Alex
2002-03-01 20:21
2002.03.18
Dll


1-57451
lipskiy
2002-03-02 00:22
2002.03.18
Нужно входящий параметр в процедуре объявить несколькими типами...


1-57390
Lipskiy
2002-03-01 16:10
2002.03.18
Правда ли то, что используя наиболее короткие имена переменных можно уменьшить объем ехешника?


1-57407
snoup
2002-03-02 02:25
2002.03.18
Как на Delphi создать раздел в реестре типа DWORD


1-57365
Анонимщик
2002-03-01 14:07
2002.03.18
Как сделать хинт, которыйбы перемещался вместе с мышиным курсором и был под ним?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский