Zdarzenie Windows - kabel HDMI

0

Witam,
robię aplikacje w WPF która posiada dwa okienka, jedno zawiera panel sterujący, a drugie panel wyświetlający (czyli taki który ma zostać przekazany przez kabel hdmi do telewizora i na nim ma zostać wyświetlony).
Dlatego chciałbym się zapytać czy istnieje sposób aby obsłużyć zdarzenie wywołane przez windows za pomocą aplikacji WPF. Mianowicie po uruchomieniu aplikacji i podłączeniu kablem HDMI, telewizora i laptopa aby aplikacja wykrywała to zdarzenie i wyświetlała na ekranie telewizora okienko wyświetlające.

Pozdrawiam

1

Zapoznaj się z odpowiedziami na:
http://stackoverflow.com/questions/5858005/detecting-hdmi-cable-event-within-net
Szczególnie zajrzyj do artykułu. Polecam też hasło: c# detect hdmi w wyszukiwarce ;)

0

Dzięki za odpowiedź. Właściwie to nie za bardzo wiem jak skorzystać z WM_DEVICECHANGE. Szczerze powiedziawszy nie doszedłem jeszcze do takiego 'poziomu programowania' ale będę próbował. Zapytam się jeszcze w jaki sposób mógłbym po wykryciu zdarzenia przekazać obraz tylko jednego okienka.

0

Zapytam się jeszcze w jaki sposób mógłbym po wykryciu zdarzenia przekazać obraz tylko jednego okienka.

Głupia odpowiedź - w sposób poprawny. Ciężko mi coś powiedzieć więcej, bez informacji jak te "dwa okienka" masz zrealizowane. Wrzuć trochę kodu.

0

W pliku App.xaml mam uruchomienie pierwszego okienka

<Application ... StartupUri="PanelSterowania.xaml">...</Application>

w panelu sterowania mam konstruktor:

        public PanelSterowania()
        {
            InitializeComponent();
            var P_Wysw = new PanelWyswietlania();
            P_Wysw.Show();
        }

W okienku sterowania mam różne kontrolki, zaś na panelu wyświetlania mam tylko kontrolki Label które zawierają odpowiednie cyfry (których wartość jest zmieniana po kliknięciu odpowiednich przycisków na panelu sterowania). I tak to wygląda.

0

Z czystej ciekawości - co to za projekt? Robisz coś dla siebie, czy na uczelnie?
Jeszcze uzupełnienie do tematu - poprzedni link, który podałem odnosił się do WinForms, w WPF do tematu powinieneś podejść w taki sposób:
http://stackoverflow.com/a/1926796
Jeżeli masz osobne okno zadeklarowane i wyświetlane w konstruktorze pierwszego okna, to nie dziwne, ze masz problem z późniejszym dostępem do niego.
Poszukaj na forum jak zarządzać oknami i odwoływać się z jednego okna do drugiego - to pytanie było chyba z miliard razy na forum ;)

0

Do pracy inżynierskiej. Bo robię program do obsługi wyników na zawodach judo.
Coś takiego http://upload.wikimedia.org/wikipedia/commons/e/e2/Olympic_Judo_London_2012_%2864_of_98%29.jpg
Tak powinien wyglądać ekran do wyświetlania, a do sterowania odpowiednie przyciski do wybierania nazwisk zawodników z bazy danych (korzystam z LINQ to xml), do przyznawania odpowiednio punktów, wstrzymywania i puszczania czasu itp.
Tu znalazłem przekazywanie wartości:
http://www.elektroda.pl/rtvforum/topic1253574.html

0

Akurat z przekazywaniem danych przez formę ten link co podałeś to nie najlepsze rozwiązanie. W WPF nawet nie jestem pewien, czy zadziała - może czasem modifiers nie być.
Mimo że to praca inżynierska, to proponuję mimo wszystko zapoznać się ze wzorcem MVVM. Jest to bardzo fajny wzorzec, do takiej prostej aplikacji pasowałby znakomicie, dużo rzeczy uzyskałbyś automagicznie - np kontrolowanie wyników. Ręczne ustawianie wartości w kodzie w kontrolkach to brzydkie rozwiązanie. Tutaj masz pierwszy lepszy tutorial:
http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial

0

Dzięki wielkie, z miła chęcią nauczę się czegoś nowego, skoro mówisz że przydatne :)
A dałbyś jakąś podpowiedź do ustawiania czasu? Czas leci od 5 minut do 0 (w dół). Czas nie musi być co do milisekundy, więc Thread.Sleep() by prawdopodobnie wystarczył.
Tylko czy kontrolkę wyświetlającą czas zrobić na trzech zmiennych typu int?

/*EDIT
W swoim programie nie nazwałem tak zmiennych bo ich nawet nie stworzyłem. To jest tylko taki prototyp który stworzyłem aby się dowiedzieć czy takie rozwiązanie jest dobrym rozwiązaniem, czy powinienem się kierować jednak w innym kierunku. Dzięki za uwagi, na pewno przydadzą się
*/
int minuty = 5;
int sekundy_p = 0;
int sekundy_d = 0;
//minuty : sekundy_p sekundy_d

i przeprowadzać sprawdzanie

        private void start(){
            while(1){
                if(sekundy_d != 0){
                     sekundy_d--;
                }else{
                     if(sekundy_p != 0){
                          sekundy_p --;
                          sekundy_d = 9;
                     }else{
                          if(minuty != 0){
                               minuty--;
                               sekundy_p = 5;
                               sekundy_d = 9;
                          }else{
                               stop();
                               koniec_czasu();
                          }
                     }
                }
                Thread.Sleep(1000);
            }
        }
1

Chyba nie od tej strony się do tego zabierasz. Takie 2 linki dla ciebie:

2

Jest taka anegdota: Jak znacznie przyśpieszyć swój kod? Wystarczy usunąć z niego wszystkie "sleepy". Użycie Sleep() powinno być dozwolone, pod warunkiem że autor jest gotów przyjąć publiczną karę chłosty, podobnie jak copy-pastem. Może elegancko by nie było, ale za to jak wesoło!
Nie mam pojęcia co tam odmierzasz, ale sleep to najgorsze co może być. W WPF nie po to prężne umysły z MS projektowały mechanizm Storyboard i nie po to powstała kontrolka DispatcherTimer, (o której wyżej wspominano).
Swoją drogą - chyba warto już założyć nowy temat, bo to o co teraz pytasz z przewodami ma mało wspólnego ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1