Category Archives: .NET Framework

Budzik

Pobierz programOd mniej więcej roku jako budzika używam komputera. A dokładniej programu WakeupOnStandBy. Jest to mały programik, który potrafi wybudzić komputer ze stanu uśpienia bądź hibernacji (to drugie nie na każdym komputerze) i uruchomić zadany program. Np. odtwarzacz multimedialny. Aplikacja ma bardzo dużo opcji co daje jej wielką uniwersalność. Ale z drugiej strony, ja potrzebowałem tylko budzika, a nie kombajnu.

W końcu ten nadmiar przycisków, checkboksów, pól edycyjnych mnie zirytował i postanowiłem napisać sobie budzik samemu. Taki, który będzie robił dokładnie to, czego potrzebuję – budził mnie – i nic więcej.

Aplikacja jest banalnie prosta: na górze okna mamy TimePicker z biblioteki AvalonControlsLibrary w który wprowadzamy pożądaną godzinę budzenia. Aplikacja domyślnie ustawia to pole na za 8 godzin i 10 minut. 8 godzin, bo tyle snu potrzebuje człowiek, a te 10 minut to zapas na jakieś czynności wykonywane tuż przed snem, typu gaszenie świateł, wyłączanie różnych rzeczy, modlitwa, kładzenie się, zasypianie… Pod godziną jest wielki przycisk z budzikiem – wystarczy go kliknąć i można uśpić komputer. O zadanej godzinie komputer sam się obudzi i zagra utwór, którego wybór umożliwia drugi przycisk. Wybór jest zapamiętywany w pliku konfiguracyjnym, więc nie trzeba używać tego przycisku za każdym razem.

Jak to w ogóle działa? Otóż – znów musiałem skorzystać z API Windows. Tym razem potrzebne są funkcje:

Uwaga: Funkcja SetWaitableTimer przyjmuje parametr czasu w formacie FILETIME. Obiekt typu DateTime można skonwertować do tego formatu używając metody ToFileTimeUtc().

Program przeznaczony dla systemu Windows Vista z .NET Framework 3.5 (używa klasy GlassWindow z poprzedniego postu).

Download:
Budzik
Budzik – kody źródłowe

PS: Zanim zaufasz budzikowi, upewnij się, czy twój komputer daje się programowo wybudzić z hibernacji. Jak nie, to go na noc tylko usypiaj i upewnij się, że nie zahibernuje się sam.

PPS: Nie biorę odpowiedzialności za szkody wywołane zaspaniem.

Okno ze szkła

Windows Vista udziwnił troszeczkę konstrukcję okna wprowadzając półprzezroczystą część nazywaną Glass (szkło). Jest to ewidentnie wodotrysk i trochę dziwi mnie, dlaczego wprowadzono do API funkcje, które mogą okazać się tylko chwilową modą, która zniknie wraz z nastepną wersją systemu.

No dobrze, w Windows 7 dalej będzie ten wodotrysk, więc skoro już jest, to warto może spróbować go użyć (byle nie nadużyć). Nie oszukujmy się – ludzie lubią wodotryski.

WPF nie daje bezpośredniej możliwości operowania na szkle – potrzebujemy wywołać funkcję API DwmExtendFrameIntoClientArea przyjmującą jako argument uchwyt okna i strukturę MARGINS. A może by tak postarać się trochę i utworzyć DependencyProperty – animowalną, bindowalną i elegancką (na tyle, na ile DependencyProperty można nazywać elegancką) właściwość pozwalającą regulować szklany obszar okna?

Proponuję zrobić to tak:

Teraz – zamiast tworzyć okna na bazie klasy Window, możemy użyć klasy GlassWindow posiadającej właściwość GlassFrame typu Thickness, którą możemy się posługiwać jak każdą inną DependencyProperty.

Ustawiając dodatnie wartości dla GlassFrame, możemy regulować grubość szklaj ramki. Jeśli ustawimy wartości ujemne – całe okno zrobi się szklane.

Zabawy z LINQ

W ramach eksperymentów z LINQ, trochę z WPF, napisałem programik do wyznaczania modelu regresji liniowej. Program wczytuje dane empiryczne z pliku CSV (w pierwszej kolumnie powinny być wartości zmiennej objaśnianej, w następnych – objaśniających; powinno być przynajmniej 10 wierszy), następnie dobiera zmienne metodą Bartosiewicz (grafową) aby na końcu wypluć równanie modelu.

Może się przyda jakiemuś studentowi na zaliczenie… Zwłaszcza, że utwór przekazuję do domeny publicznej.

Download

PS: Nie gwarantuję, że program działa w pełni poprawnie.