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

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

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

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?

0

może spróbuj funkcji sleep

0

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

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

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.
ShellExecute( NULL, "open", "C:/Program.exe", "-fullscreen", "", SW_SHOWNORMAL);
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ł)?

0

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

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...

0

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

0

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

0

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

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.

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