twoja przeglądarka nie obsługuje Javascript :). główna strona w serwisie to http://www.visualbasic.terramail.pl/index.html Pytania zadawane w listach oraz ciekawe pomysły rozwiązań problemów z VB i VBA
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
  1. Private Sub Timer1_Timer()
  2. On Error GoTo obsluga_bledu 'jeśli wykryje błąd skoczy do etykiety
  3. 'próba wykrycia notatnika jeśli go nie ma to nie ma co
  4. 'aktywować
  5. 'generuje błąd nr 5
  6. 'Invalid procedure call or argument (Error 5)
  7. AppActivate "Bez nazwy - Notatnik"
  8. 'w nazwach nie istotna wielkość liter
  9. 'Timer1.Interval = 0 jeśli nie chcemy sprawdzać czy zamkną
  10. 'to można użyć interval = 0 by przerwać śledzenie
  11. obsluga_bledu: 'obsługa błędu
  12.     If Err.Number = 5 Then '
  13.     frm_1.Caption = "Notatnik jeszcze nie uruchomiony lub zmieniła się nazwa jego okna"
  14.     Else
  15.     'Uwaga w rzeczywistej aplikacji należy zwrócić uwagę że tu
  16.     'będą kierowane wszystkie inne błędy poza błędem nr 5
  17.     'oraz na to że nazwa okna może ulec zmianie podczas działania
  18.     'aplikacji
  19.     frm_1.Caption = "Notatnik uruchomiony"
  20.      Randomize
  21.     frm_1.BackColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
  22.     'teraz możnaby wyłączyć zegar chyba że chcemy wiedzieć
  23.     'kiedy aplikacja skończy działanie
  24.     End If
  25. 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: