[ Pobierz całość w formacie PDF ]
.Klikniêcie przycisku powinno spowodowaæ odszukanie okna Kalkulatora, zmieniæzawartoœæ jego paska tytu³u i „mrugn¹æ” nim.Ca³y eksperyment wymaga oczywiœciewczeœniejszego uruchomienia Kalkulatora (calc.exe).Uruchom IDE i utwórz nowy projekt.Wstaw do g³Ã³wnego formularza pojedynczy przycisk.Kliknij przycisk dwukrotnie i w edytorze kodu wpisz zawartoœæ funkcji OnClick,przedstawion¹ na wydruku 14.11.Wydruk 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");}Uruchom program klikniêciem przycisku uruchomienia (dla zapominalskich – to tenw kszta³cie zielonej strza³ki).Po uruchomieniu programu zminimalizuj okna IDE tak, by nie zas³ania³yzawartoœci pulpitu.Uruchom Kalkulator i zminimalizuj jego okno.Kliknij przycisk w oknie naszego programu.Zawartoœæ paska tytu³u Kalkulatorapowinna zmieniæ siê z Kalkulator na Liczyd³o, a okno powinno „mrugn¹æ”.Wyjaœnijmy dok³adniej kolejne etapy dzia³ania programu.HWND hHandle = FindWindow(NULL, "Kalkulator");Powy¿sza instrukcja, wykonywana jako pierwsza po klikniêciu przycisku, ustalauchwyt 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¿nate¿ wykorzystaæ opisan¹ we wczeœniejszej czêœci rozdzia³u metodê identyfikacjiokien za pomoc¹ funkcji EnumWindows() i przedstawiæ u¿ytkownikowi do wyborulistê okien.Struktura danych steruj¹cych dzia³aniem funkcji FlashWindowEx()wykorzystywanajest 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 informacjiniezbêdnych do wykorzystania funkcji FlashWindowEx() i przekazujemy jej adresjako parametr funkcji.Znaczenie poszczególnych elementów struktury opiszemyponi¿ej.Pole cbSize zawiera rozmiar struktury typu FLASHWINFO.W polu hwnd umieszczasiê uchwyt interesuj¹cego nas okna.W naszym przyk³adzie uchwyt oknaKalkulatora uzyskaliœmy za pomoc¹ wywo³aniaHWND hHandle = FindWindow(NULL, "Kalkulator");Pole dwFlags zawiera opcje steruj¹ce dzia³aniem funkcji FlashWindowEx().Wnaszym przypadku w³¹czyliœmy miganie paska tytu³u okna oraz przycisku na paskuzadañ; u¿ycie opcji FLASHW_TRAY pozwoli³oby ograniczyæ sygnalizacjê wy³¹czniedo paska zadañ.Opcja FLASHW_TIMER nakazuje funkcji dzia³aæ, a¿ do ponownegowywo³ania z u¿yciem opcji FLASHW_STOP.Mo¿liwe jest te¿ zadanie okreœlonejliczby migniêæ okna, do czego s³u¿y pole uCount (w naszym przypadku nakazaliœmyfunkcji wykonaæ osiem cykli i zakoñczyæ pracê).Wreszcie pole dwTimeout pozwalaokreœliæ czas trwania pojedynczego migniêcia w milisekundach (w przyk³adzieu¿yliœmy stosunkowo niewielkiej wartoœci, warto wiêc sprawdziæ kilka innychustawieñ).Przedstawion¹ tu metodê u¿ycia funkcji FlashWindowEx() mo¿na wykorzystaæ dopowiadamiania o b³êdach i innych zdarzeniach bez koniecznoœci wyœwietlaniaokien komunikatów.Pozwala ona tak¿e poinformowaæ u¿ytkownika, ¿e oknoaplikacji jest ju¿ gotowe do pracy, ale nie zosta³o wybrane (uaktywnione).Mo¿na zatem powiedzieæ, ¿e FlashWindowEx() przydaje siê w sytuacjach, gdyzale¿y nam na przyci¹gniêciu uwagi u¿ytkownika bez zatrzymywania dzia³aniaprogramu wyœwietleniem okna dialogowego – w tym ostatnim przypadku kontynuacjapracy wymaga wykonania dodatkowego kroku, czyli zamkniêcia okna komunikatu.Przyk³ad dzia³ania naszej procedury przedstawiono na rysunku 14.6.Rysunek 14.6.Uruchomiony program lokalizuje okno Kalkulatora i „mruga” jegopaskiem tytu³uZarz¹dzanie stacj¹ robocz¹Kolejn¹ grupê przydatnych funkcji tworz¹ mechanizmy zarz¹dzania stacj¹ robocz¹,czyli np.zablokowania konsoli w systemie Windows NT, zablokowania klawiszyCtrl+Alt+Del czy te¿ zamkniêcia lub ponownego uruchomienia systemu.Równie¿ itu interfejs Win32 udostêpnia sporo mo¿liwoœci.Eksperymenty z systemowymifunkcjami zarz¹dzania stacj¹ robocz¹ wymagaj¹ jednak daleko posuniêtejostro¿noœci.Uruchamiaj¹c program, nale¿y pamiêtaæ o czêstym zapisywaniu go nadysku, w przeciwnym razie mo¿emy np.niechc¹cy zamkn¹æ system i pozbawiæ siêwyników pracy.Blokowanie konsoliPora na przedstawienie kolejnej funkcji Win32 o nazwie LockWorkStation(),umo¿liwiaj¹cej programowe zablokowanie stacji roboczej (konsoli) w systemieWindows NT.Nie posiada ona parametrów, jest banalnie prosta w u¿yciu, a jejdzia³anie jest analogiczne do naciœniêcia klawiszy Ctrl+Alt+Del i wybraniaopcji Zablokuj komputer.Odblokowanie konsoli po wywo³aniu LockWorkStation()wymaga zalogowania u¿ytkownika.Prototyp funkcji zamieszczono w pliku winuser.h.Jej wykorzystanie, jak ju¿powiedzieliœmy, sprowadza siê do jednego wiersza kodu:LockWorkStation();Jedynym mankamentem funkcji LockWorkStation() jest jej niedostêpnoœæ wsystemach Windows 9x
[ Pobierz całość w formacie PDF ]