Pomocna dłoń
Strona ta poświęcona będzie odpowiedziom na pytania zadawane przez czytelników. Ponieważ nie jestem alfą i omegą nie liczcie, że odpowiem na każdy problem. Postaram się jednak nie pozostawić nikogo bez odpowiedzi.
Napisz do mnie
Problemy rozwiązane:
W jaki sposób wykryć stan aplikacji (nie obsługującej DDE)?
Aby w swoim programie wykryć czy aplikacja jest uruchomiona wystarczy wystarczy wykonać komendę AppActivate. Pełna składnia komendy wygląda tak
-- AppActivate title[, wait] --
gdzie parametr title jest to nazwa w -pasku tytułowym-
w omówionym przykładzie będzie to "Bez nazwy - Notatkik" przy czym wielkość liter nie musi pokrywać się z rzeczywistością. Parametr wait jest opcjonalny (standardowo False)i nie będę go tu omawiał.
Gdy aplikacja nie jest uruchomiona wówczas nasz program wygeneruje błąd numer 5 - Invalid procedure call or argument (Error 5) -. Błąd ten jednak nie będzie dla nas zmorą, a w ręcz przeciwnie umożliwi nam wykrycie stanu aplikacji. Jedynym problemem jaki staje przed nami jest napisanie jego obsługi.
W moim programie cały kod umieściłem w wewnątrz timera ale może to być równie dobrze inny obiekt np. przycisk
- Private Sub Timer1_Timer()
- On Error GoTo obsluga_bledu 'jeśli wykryje błąd skoczy do etykiety
- 'próba wykrycia notatnika jeśli go nie ma to nie ma co
- 'aktywować
- 'generuje błąd nr 5
- 'Invalid procedure call or argument (Error 5)
- AppActivate "Bez nazwy - Notatnik"
- 'w nazwach nie istotna wielkość liter
-
-
- 'Timer1.Interval = 0 jeśli nie chcemy sprawdzać czy zamkną
- 'to można użyć interval = 0 by przerwać śledzenie
-
- obsluga_bledu: 'obsługa błędu
- If Err.Number = 5 Then '
- frm_1.Caption = "Notatnik jeszcze nie uruchomiony lub zmieniła się nazwa jego okna"
- Else
- 'Uwaga w rzeczywistej aplikacji należy zwrócić uwagę że tu
- 'będą kierowane wszystkie inne błędy poza błędem nr 5
- 'oraz na to że nazwa okna może ulec zmianie podczas działania
- 'aplikacji
- frm_1.Caption = "Notatnik uruchomiony"
- Randomize
- frm_1.BackColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
- 'teraz możnaby wyłączyć zegar chyba że chcemy wiedzieć
- 'kiedy aplikacja skończy działanie
- End If
- End sub
nazwa formy to oczywiście frm_1.
Poniżej zamieszczam przykładową aplikację.
Wykorzystanie funkcji AppActivate nie jest ograniczone do wykrywania czy aplikacja jest aktywna ale umożliwia również (w ograniczony sposób) śledzenie jej działania. Ponieważ nazwa w pasku tytułowym niektórych aplikacji zmienia się podczas ich działania można użyć tego parametru do wysłania poleceń aplikacji w tedy kiedy będzie gotowa do ich przyjęcia (np. poprzez SendKeys). Dzięki takiemu rozwiązaniu można np. utworzyć aplikację która będzie kierowała działaniem innej (automatyzacja instalacji, uruchamiania w określonym czasie, itp.)
przykładowa aplikacja z kodem źródłowym.
plik zip
plik rar
Problemy nie rozwiązane: