[ Pobierz całość w formacie PDF ]
.Umożliwia ona znalezienie żądanego okna najwyższego poziomu na podstawie zawartości paska tytułu i nazwy klasy, zwraca zaś uchwyt okna.Należy jednak pamiętać, że zakres poszukiwań ograniczony jest do okien najwyższego poziomu i nie obejmuje okien potomnych (typu child).Do lokalizowania tych ostatnich można natomiast wykorzystać funkcję FindWindowEx().Oto deklaracja funkcji FindWindow():HWND FindWindow(LPCTSTR lpClassName, // nazwa klasy oknaLPCTSTR lpWindowName // zawartość paska tytułu);Parametry funkcji lpClassName i lpWindowName są wskaźnikami do zakończonych zerami łańcuchów zawierających odpowiednio nazwę klasy okna oraz zawartość jego paska tytułu.Funkcja zwraca wartość uchwytu okna lub NULL w przypadku niepowodzenia.SetWindowText()Funkcja SetWindowText() pozwala zmodyfikować tekst okna.W przypadku „zwykłych” okien zmieniana jest zawartość paska tytułu; dla elementów sterujących, takich jak np.przyciski - tekst zawarty w elemencie (np.opis przycisku, tekst etykiety).SetWindowText() nie pozwala na zmianę tekstu elementu sterującego należącego do innego programu.Deklaracja funkcji jest następująca:BOOL SetWindowText(HWND hWnd, // uchwyt modyfikowanego oknaLPCTSTR lpString // nowy tekst okna);Użycie funkcji SetWindowText() jest bardzo proste - w parametrze hWnd wystarczy umieścić uchwyt modyfikowanego okna, zaś w parametrze lpString - wskaźnik do zakończonego zerem łańcucha zawierającego nowy tekst.Pora na nieco praktykiNa wydruku 14.11 przedstawiono kod aplikacji, zawierającej pojedynczy przycisk.Kliknięcie przycisku powinno spowodować odszukanie okna Kalkulatora, zmienić zawartość jego paska tytułu i „mrugnąć” nim.Cały eksperyment wymaga oczywiście wcześniejszego uruchomienia Kalkulatora (calc.exe).lUruchom IDE i utwórz nowy projekt.llWstaw do głównego formularza pojedynczy przycisk.llKliknij przycisk dwukrotnie i w edytorze kodu wpisz zawartość funkcji OnClick, przedstawioną na wydruku 14.11.lWydruk 14.11.Powiadamianie użytkownika za pomocą funkcji FlashWindow()void __fastcall TForm1::Button1Click(TObject *Sender){HWND hHandle = FindWindow(NULL, "Kalkulator");FLASHWINFO pf;pf.cbSize = sizeof(FLASHWINFO);pf.hwnd = hHandle;pf.dwFlags = FLASHW_TIMER|FLASHW_ALL;pf.uCount = 8;pf.dwTimeout = 75;FlashWindowEx(&pf);if(hHandle)SetWindowText(hHandle, "Liczydło");}lUruchom program kliknięciem przycisku uruchomienia (dla zapominalskich - to ten w kształcie zielonej strzałki).llPo uruchomieniu programu zminimalizuj okna IDE tak, by nie zasłaniały zawartości pulpitu.llUruchom Kalkulator i zminimalizuj jego okno.llKliknij przycisk w oknie naszego programu.Zawartość paska tytułu Kalkulatora powinna zmienić się z Kalkulator na Liczydło, a okno powinno „mrugnąć”.lWyjaśnijmy dokładniej kolejne etapy działania programu.HWND hHandle = FindWindow(NULL, "Kalkulator");Powyższa instrukcja, wykonywana jako pierwsza po kliknięciu przycisku, ustala uchwyt okna Kalkulatora na podstawie zawartości paska tytułu.Zwrócona wartość uchwytu okna jest przypisywana do zmiennej hHandle.Jak zatem skorzystać z naszej funkcji? Jeśli znamy tytuł „poszukiwanego” okna, nie ma problemu - wystarczy użyć kodu w postaci przedstawionej powyżej.Można też wykorzystać opisaną we wcześniejszej części rozdziału metodę identyfikacji okien za pomocą funkcji EnumWindows() i przedstawić użytkownikowi do wyboru listę okien.Struktura danych sterujących działaniem funkcji FlashWindowEx()wykorzystywana jest następująco:FLASHWINFO pf;pf.cbSize = sizeof(FLASHWINFO);pf.hwnd = hHandle;pf.dwFlags = FLASHW_TIMER|FLASHW_ALL;pf.uCount = 8;pf.dwTimeout = 75;FlashWindowEx(&pf);Definiujemy tu zmienną pf typu FLASHWINFO, wypełniamy ją kompletem informacji niezbędnych do wykorzystania funkcji FlashWindowEx() i przekazujemy jej adres jako parametr funkcji.Znaczenie poszczególnych elementów struktury opiszemy poniżej.Pole cbSize zawiera rozmiar struktury typu FLASHWINFO.W polu hwnd umieszcza się uchwyt interesującego nas okna.W naszym przykładzie uchwyt okna Kalkulatora uzyskaliśmy za pomocą wywołaniaHWND hHandle = FindWindow(NULL, "Kalkulator");Pole dwFlags zawiera opcje sterujące działaniem funkcji FlashWindowEx().W naszym przypadku włączyliśmy miganie paska tytułu okna oraz przycisku na pasku zadań; użycie opcji FLASHW_TRAY pozwoliłoby ograniczyć sygnalizację wyłącznie do paska zadań.Opcja FLASHW_TIMER nakazuje funkcji działać, aż do ponownego wywołania z użyciem opcji FLASHW_STOP.Możliwe jest też zadanie określonej liczby mignięć okna, do czego służy pole uCount (w naszym przypadku nakazaliśmy funkcji wykonać osiem cykli i zakończyć pracę).Wreszcie pole dwTimeout pozwala określić czas trwania pojedynczego mignięcia w milisekundach (w przykładzie użyliśmy stosunkowo niewielkiej wartości, warto więc sprawdzić kilka innych ustawień).Przedstawioną tu metodę użycia funkcji FlashWindowEx() można wykorzystać do powiadamiania o błędach i innych zdarzeniach bez konieczności wyświetlania okien komunikatów
[ Pobierz całość w formacie PDF ]