Wykrywanie zamykania programów

0

Jak wykryc zamknięcie programu który został uruchomiony przez shellExecute?

0

jak masz uchwyt do procesu, to waitforsingleobject()

0

Jednym ze sposobów obsługi okien (aplikacji) przez system operacyjny jest mechanizm przesyłania wiadomości systemowych, w kierunku od systemu do aplikacji. Cały proces obsługiwany jest przez system, aplikacja użytkownika musi tylko wykonać odebrane polecenie. Jeżeli tego nie zrobi system wyświetla tekst '[Nie odpowiada]' informujący że dany program nie wykonuje wysyłanych poleceń. Procedury obsługi poleceń tworzone są automatycznie w chwili otwarcia formy. Dzięki takim poleceniom można np. zamknąć aplikację wysyłając do niej komunikat systemowy WM_SYSCOMMAND z parametrem SC_CLOSE. Aplikację adresuje się poprzez tzw. uchwyt czyli 'adres' okna w systemie Windows. Może on posłużyć również do innych operacji na wybranej aplikacji.

var Uchwyt : HWND;
begin
// pobranie uchwytu do okna na podstawie jego nazwy
Uchwyt := FindWindow('notepad', nil);
// jeżeli dane okno istnieje
if Uchwyt <> 0
// wysłanie stosownego komunikatu
then PostMessage(Uchwyt, WM_SYSCOMMAND, SC_CLOSE, 0);

...
Inne podobne parametry WM_SYSCOMMAND
SC_CLOSE zamknij okno
SC_RESTORE pokaż zminimalizowane okno
SC_MAXIMIZE maksymalizuj okno
SC_MINIMIZE minimalizuj okno
SC_SCREENSAVE uruchom wygaszacz
SC_HOTKEY uaktywnij wskazane okno

Inne komunikaty systemowe
SC_MONITORPOWER Programowe wyłączenie monitora

Typ wiadomości odbierane przez okno
WM_TIMECHANGE Aktualizacja czasu systemowego
WM_NCPAINT Rysowanie belki tytułowej i obramowania okna
WM_RASDIALEVENT Nawiązanie połączenia internetowego

// Programowe zaznaczanie/odznaczanie (Checked) kontrolki RadioButton
SendMessage(RadioButton1.Handle, BM_SETCHECK, 1 lub 0, 0);

// ale jaki to ma związek z tematem??? :| - Ł

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0