Wyłączanie monitora bez blokowania urz. wejścia.

Wyłączanie monitora bez blokowania urz. wejścia.
SE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Witam. Jestem w 3 kl tech inf.

Musze napisać program, który:

  1. Wyłączy monitor
  2. Nie bedzie dało sie go włączyć myszką klawiaturą
  3. W trakcie gdy bedzie wyłączony zasymuluje wciskanie klawiatury

Zaczałem od napisania wyłaczania monitora licząć, ze wyłączy sie twardo

Kopiuj
SendMessage(GetForegroundWindow() ,WM_SYSCOMMAND,SC_MONITORPOWER, 2);

Okzało sie ze myszka i klawiatura mogą go włączyć, więc najprościej na chłopski rozum

Kopiuj
BlockInput(1);
SendMessage(GetForegroundWindow() ,WM_SYSCOMMAND,SC_MONITORPOWER, 2);

Okazało sie, że jeżeli BlockInput zwraca True to keybd_event zmienia BlockInput na False i dodatkowo włącza sie monitor.

Nie mam pomysłu co dalej zrobic, a już tym bardziej jak to zrobić. Wyłączyć stery od karty graficznej? Kazdy komp moze miec inne stery, wiec program bedzie leżał. Nie wiem... Mozecie mi jakos doradzic?

robcio
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Opole
  • Postów: 533
0

może spróbuj funkcji sleep

adf88
  • Rejestracja: dni
  • Ostatnio: dni
0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646290.aspx, dlatego może SendInput spróbuj zamiast keybd_event.

SE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Z tą funkcją sleep to chyba strzelasz, ze usypia komputer ;P Czy coś ;> Przeciez ona wstrzymuje skrypt.
Co do SendInput to nie sprawdzalem bo znalazlem inny patent obejscia mojego problemu.

Teraz mam takie zapytanie (wale w tym topicu zeby nie spamowac forum):
Jezeli mam C:/Program.exe i utworze skrót do niego oraz do sciezki elementu dorzuce cos takiego
"C:/Program.exe" - fullscreen
To ten program odpali mi sie na full screen. Teraz takie pytanie. Skrot nie jest programem wykonywalnym jak wiemy, wiec kod

Kopiuj
WinExec("./ProgramSkrot.exe", SW_SHOW);

...nie działa, bo nie jest to prawdziwy exec - logiczne. Moje pytanie zatem brzmi, jak odpalić Program.exe z parametrem -fullscreen? Lub jakim magicznym (dla mnie) sposobem odpalić ten skrót z juz wpisanym parametrem FS?


ODPOWIEDZ
Doszedłem sam do tego, dlatego zamieszczam tutaj sposob jak to zrobic - gdyby ktos, kiedys, za pare lat trafił tutaj z googli.
Kopiuj
ShellExecute( NULL, "open", "C:/Program.exe", "-fullscreen", "", SW_SHOWNORMAL);
SE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Fail.

Niestety jak sie okazało, odpalenie aplikacji z parametrem -fullscreen, działa na tyle bezczelnie, że polega to na włączeniu aplikacji normalnie i zasymulowaniu wcisniecia F11, a nie odpaleniu jej jakos ambitnie na FS.

Tak wiec powrót... Jak obejść to, żeby przy wciskaniu klawiszy SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, x); nie tracił swojej wartosci (zeby monitor sie nie zapalał)?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

najpierw keybd_event a potem natychmiast SendMessage(GetForegroundWindow() ,WM_SYSCOMMAND,SC_MONITORPOWER, 2);
zapewniam cię że monitor nie zdąży się przerysować.

SE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Teoretycznie...
...natomiast praktycznie wyglada to tak, ze po miedzy wygaszeniem ekranu, a wcisnieciem klawiatury jest kilkanaście waznych procesów, odpalań programów zewnetrznych itd... Wiec to odpada ;/

Nie ma czegos takiego jak odciecie zasilania od monitora? :D

Moze jakies propozycje jeszcze? Błagam...

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

no to co za problem?
SendMessage
procesy
keybd_event
SendMessage
co najwyżej mrugnie.

adf88
  • Rejestracja: dni
  • Ostatnio: dni
0

Może "na chama" to zrobić. Opalić wątek i w kółko wysyłać SC_MONITORPOWER. Powinno się sprawdzić :)

szopenfx
  • Rejestracja: dni
  • Ostatnio: dni
0

Bardziej bezczelnego wyrobu "wirusopodobnego" nie widziałem ^^

SE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
1
szopenfx napisał(a):

Bardziej bezczelnego wyrobu "wirusopodobnego" nie widziałem ^^

Nie znajduje lepszej odpowiedzi na dwa powyzsze posty :D

Niestety chodz wszyscy z nas wiedzą, że to mega głupie to chyba tego inaczej nie da sie obskoczyć :P
Masakra...

Dzieki za pomoc chłopaki, niech moc bedzie z wami.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.