Подскажите как определить открыто ли окно?
От: abrikos2002  
Дата: 30.03.03 10:09
Оценка:
Создаю приложение: ShellExecute(xHWND...

Чем можно определить по xHWND выполняется ли еще приложение или уже нет?

Спасибо за внимание к чайнику...
Re: Подскажите как определить открыто ли окно?
От: Slicer [Wirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 30.03.03 10:49
Оценка:
Нужно, чтобы было ненулевым значение

BOOL IsWindow(
HWND hWnd
);

Кроме того, окно могли просто спрятать (Hide). Можно и это отследить:

BOOL GetWindowPlacement( HWND hWnd,
WINDOWPLACEMENT* lpwndpl
);
В возвращаемой структуре showCmd не должно быть равно SW_HIDE.

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re: Подскажите как определить открыто ли окно?
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.03.03 15:10
Оценка:
Здравствуйте, abrikos2002, Вы писали:

A>Чем можно определить по xHWND выполняется ли еще приложение или уже нет?


по HWND — никак. Если процесс издох, то никаких HWND у него не будет.

Юзай ShellExecuteEx.

    SHELLEXECUTEINFO info;

    ZeroMemory(&info,sizeof(info));
    info.cbSize = sizeof(info);
    info.lpFile = "CCProxy.exe";
    info.lpVerb = "open";
    info.lpDirectory = m_Directory;
    info.nShow = SW_HIDE;
    info.fMask = SEE_MASK_NOCLOSEPROCESS;
    
    BOOL bRet = ::ShellExecuteEx(&info);
    if(bRet)
    {
          info.hProcess;  // это нужно запомнить.
    }


Когда хочешь проверить, работает ли еще аппликация, делаешь так

if(WaitForSingleObject(info.hProcess,0) == WAIT_OBJECT_0) // ожидаешь 0 милисекунд.
{ 
// успешно издохла :)
}
else
{
// успешно сопротивляется издыханию
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.