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

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VMS$
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 30.06.2003 (Пн) 18:27

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

Сообщение VMS$ » 30.06.2003 (Пн) 18:33

:?:
Подскажите, pls, как узнать момент завершения запущенного приложения из программы VB, (например архиватора, чтоб узнать момент готовности архива)?
И еще вопросик, как узнать имя окна по ProcessID?

Urvin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 518
Зарегистрирован: 04.06.2003 (Ср) 10:47
Откуда: с Марса

Сообщение Urvin » 30.06.2003 (Пн) 20:14

На головном vbstreets.ru есть статья об этом деле.
Не так страшен русский танк, как его пьяный экипаж

VMS$
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 30.06.2003 (Пн) 18:27

Сообщение VMS$ » 03.07.2003 (Чт) 20:21

Urvin писал(а):На головном vbstreets.ru есть статья об этом деле.

Не нашел я статейки. Пробовал GetWindow(...) и GetTreadInfo(...) (или как там). В отладчике процесс ловится, в реальнои запуске -нет. Почему?

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 04.07.2003 (Пт) 1:22

Для решения похожей проблемы я создавал ОСХ-компонент на VC++. Работает безупречно. Первоисточник не помню. Решать эту задачу на VB лень.

STARTUPINFO si;
PROCESS_INFORMATION pi;
unsigned long Result;

long C::RunProcess(LPCTSTR CmdLine)
{
// TODO: Add your dispatch handler code here
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.wShowWindow = SW_SHOW;
si.dwFlags = STARTF_USESHOWWINDOW;

if (!CreateProcess(NULL,(LPSTR)CmdLine,NULL,NULL,FALSE,
CREATE_NEW_CONSOLE|NORMAL_PRIORITY_CLASS,NULL,NULL, &si, &pi))
return 0;
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess,&Result);

return pi.dwProcessId;
}
void C::WaitProcess()
{
// TODO: Add your dispatch handler code here
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess,&Result);
}
void C::CloseProcess(long ProcID)
{
HANDLE hProcess;
hProcess=OpenProcess(PROCESS_TERMINATE, 0, ProcID);
if (hProcess!=0)
{ TerminateProcess(hProcess,0);
CloseHandle(hProcess);
}
}

Dagobert
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 141
Зарегистрирован: 21.12.2002 (Сб) 6:48
Откуда: Russia

Сообщение Dagobert » 07.07.2003 (Пн) 6:47


jSergey
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 01.09.2005 (Чт) 6:34

Сообщение jSergey » 28.09.2005 (Ср) 6:22

Dagobert писал(а):Есть статья: http://www25.brinkster.com/msvbasic/default.asp?p=execwait&s=vb

Статьи уже нет

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 28.09.2005 (Ср) 11:46

Подключаем WMI...

В начале:

Код: Выделить всё
set wmi = createobject("WinMgmts:")
set oQ = wmi.ExecQuery("select * from Win32_Process where name = " & s_imya_progi_dlya_otslejki)
for each o in oQ
i = o.ProcessID
next


Фиксирование окончания:
Код: Выделить всё
set oQ = wmi.ExecQuery("select * from Win32_Process where ProcessID = " & i )
b_est = false
for each o in oQ
b_est = true
exit for
next


Ясно?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.09.2005 (Ср) 17:07

Это что же, ты предлагаешь по таймеру проверять, жив ли ещё процесс? ;-)
Изображение

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 28.09.2005 (Ср) 19:58

Ё-моё! В "Кирпичный завод"! Искать "Waiter"! Автор GSerg!
В "Популярные вопросы"! Искать "Контроль за приложениями" и "WaitForSingleObject"! Примитив, зато автор я (от скромности не помру)!
Моду создают модоки, а распространяют модозвоны.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 84

    TopList