Avatar billede fritter25 Nybegynder
03. september 2003 - 23:36 Der 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:-))
Avatar billede bertelbrander Novice
03. september 2003 - 23:46 #1
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.
Avatar billede tonnybrandt Nybegynder
04. september 2003 - 00:17 #2
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.
Avatar billede tonnybrandt Nybegynder
04. september 2003 - 00:19 #3
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 ?
Avatar billede fritter25 Nybegynder
04. september 2003 - 09:30 #4
bertelbrander: Har du evt. et sådan delay, som jeg kunne få lov til at kigge på? Kan man sagtens bare lave .exe filen om til en .scr fil?
Avatar billede driis Nybegynder
04. september 2003 - 14:56 #5
Dit delay kan du f.eks. lave med Windows' Sleep funktion:

#include <windows.h>
.
.
.
for ( int i = 0 ; i < 60 * 3 ; i++ ) Vent 3 * 60 gange af ét minut = 3 timer.
    Sleep(60000) ; // Vent ét minut
Avatar billede driis Nybegynder
04. september 2003 - 14:58 #6
Sleep afgiver CPU tiden til andre processer mens der ventes, så ovenstående låser ikke systemet.
Avatar billede driis Nybegynder
04. september 2003 - 15:05 #7
Og med hensyn til at lave en screen saver så er her en rigtig udmærket artikel om emnet:
http://www.codeproject.com/bitmap/ballfusion.asp
Avatar billede bertelbrander Novice
04. september 2003 - 17:47 #8
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.
Avatar billede fritter25 Nybegynder
06. september 2003 - 11:42 #9
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 ;
}
Avatar billede driis Nybegynder
06. september 2003 - 12:29 #10
Har du læst mit tidligere link ?
Avatar billede driis Nybegynder
06. september 2003 - 12:33 #11
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.
Avatar billede fritter25 Nybegynder
06. september 2003 - 13:03 #12
Du vil simpelthen være min nye bedste ven, hvis du gad gøre det:-))
Avatar billede bertelbrander Novice
06. september 2003 - 13:52 #13
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.
Avatar billede fritter25 Nybegynder
07. september 2003 - 10:32 #14
Hej driis. FIk du kigget på problemet?
Avatar billede fritter25 Nybegynder
07. september 2003 - 11:07 #15
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 );

    return 0 ;
}
Avatar billede driis Nybegynder
07. september 2003 - 18:05 #16
Avatar billede fritter25 Nybegynder
15. oktober 2003 - 13:37 #17
lukket
Avatar billede fritter25 Nybegynder
15. oktober 2003 - 13:37 #18
lukket igen
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester