03. september 2003 - 23:36Der er
17 kommentarer og 1 løsning
Automatisk shutdown af Win98 klienter v.h.a screensaver.
Jeg skal lave et program som skal kunne lukke en windows98 maskine ned, efter at den har været inaktiv i 3-4 timer. Jeg tænkte på om det er muligt at lave det som screensaver, men så opdagede jeg, at man ikke kan sætte pauseskærmen højere end 60 minutter. Er der en metode at omgåes dette på?
Mine problemer er nu følgende:
1) Hvordan laver jeg en screensaver i C++??. Jeg prøvede at ændre .exe filen for den kode jeg allerede har, til en .scr fil, som jeg så lagde i system mappen. Når jeg så valgte den fil under screensaveren, så lukkede den bare alle åbne vinduer ned, inden at jeg kunne nå at klikke ok.
2) Jeg er ikke nogen ørn til C++, så forvent ikke formeget af mig:-))
Problemet er at windows vil køre din exe/scr fil når man vælger den under screensaver. For at løse dette problem, og problemet med at du max kan have et delay til pauseskærmen på 60 min, skal du have bygget et delay ind i dit program.
Nu er jeg ikke programmør, men de 60 minutter du nævner er jo tiden før screensaveren automatisk går igang, så derfor kan du vist ikke bruge den tid til noget som helst. Som bertelbrander skriver er du nødt til at måle tiden inde i selve screensaveren når ece/scr filen kører.
Prøv lige om ikke du kan bruge instillingerne i strømstyring til noget. I XP kan man jo sætte den til standby eller hibernate efter op til 6 timer. Måske du slet ikke behøver at lave noget ?
Jeg er ikke sikker på at man uden videre kan omdøbe en exe til scr og bruge den som screensaver. Man er måske nødt til at lave noget kode der lukker programmet når musen bevæger sig eller der er nogen der trykker på en tast. Jeg er heller ikke sikker på at det er en god ide at bruge Sleep() til at lave delay'et da man i så fald ikke kan modtage beskeder mens man Sleep'er. Normalt ville man starte en timer med SetTimer(...), find den i din kompilers dokumentation. Jeg ved ikke ret meget om screensavere.
Nu har jeg forsøgt og forsøgt for at få programmet til at køre, også med et delay, men jeg kan stadig ikke nå at klikke ok, når jeg vælger programmet under "Pauseskærm" Er der nogen af jer der lige gider kigge på min kode, og evt, kan fortælle mig, hvad der er galt?
int main() { ExitWindowsEx( EWX_SHUTDOWN + EWX_FORCE, 0 );
for ( int i = 0 ; i < 60 * 3 ; i++ ) Sleep(60000) ; return 0 ; }
Dit problem er at Windows prøver at previewe pauseskærmen, og således bliver koden kørt. Desuden skal programmet være et rent Windows program; ikke konsol eller DOS. int main() {} hører til i DOS / konsol.
Jeg kan evt. prøve om jeg kan strikke et eksempel sammen til dig senere i dag, hvis jeg får lidt tid til overs.
Det ville måske være en ide at lave delayet FØR man forsøger at lukke windows, dvs putte ExitWindowsEx(...) ind efter Sleep() loop'en. Der er dog ingen garanti for at det vil virke.
Nu har jeg prøvet at lægge delayet ind før shutdown, hvilket også virker fint, men istedet for at lukke windows, åbner den bare en masse commandopromt vinduer. Min kode ser ud som følgende:
int main() { for ( int i = 0 ; i < 60 * 3 ; i++ ) Sleep(60000) ; // Vent ét minut ExitWindowsEx( EWX_POWEROFF + EWX_FORCE, 0 );
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.