28. juli 2003 - 22:52Der er
17 kommentarer og 1 løsning
Program der forhindrer screensaver og energibesparelsesmode
Jeg vil gerne lave et Delphi program der forhindrer PC'en i at starte screensaveren og forhindrer energibesparelsen i at slukke for skærme/diske. Det skal virke for både Win95, Win98, WinNT, Win2K samt WinXP. Har forsøgt med lidt af hvert uden held...
Ja, det ser sådan ud - men hvad hedder konstanterne for 'Systemstandby' og 'Sluk for harddiske'? (Win2K terminologi) Problemet er, at jeg har et program der ikke selv kan starte en natkørsel op, efter at computeren er gået i sleep mode...
Det er en række batchjobs der startes af en timer. Men når computeren er gået i standby mode og diskene er slukkede kan programmet ikke få liv i computeren igen, og natkørslen bliver ikke kørt. Derfor skal det forhindres at computeren går i standby mode og slukker for diskene. Det med screensaveren og monitorpower virker top max...
Programmet skal i alt sin enkelthed forhindre at en pc går i standby mode og slukker for diskene, uanset om det kører under 95,98,NT,2K,XP. Det lyder nemt, men.... :)
nu ved jeg ikke hvordan du har det med komponenter, men dette komponent kan vist det hele :) og hvis ikke så bare stadig brug den øverste funktion jeg skrev
det kunne jeg meget vel forestille mig at den var .. du kan jo evt prøve på din egen og sætte standby til 1 minut eller lign .. så finder du jo hurtigt ud af det .. :)
...tak - jeg kigger lige på det - det skal desværre være i Delphi 3 - men det kan jo også være det virker der... :) Prøver mig frem så hører du nærmere...
Der oprettes en funktion (i dette tilfælde navngivet AppMessage) der kaldes hver gang der sendes en WindowsMessage til hovedformen. Her sat i FormCreate (Application.OnMessage:=AppMessage;). Denne funktion blokerer for start af screensaver og monitor standby.
For at forhindre at pcen går i standby mode eller slukker for skærme/diske overskrives proceduren WndProc. Husk at nedarve (inherited;). Her kan man så teste på og afvise alle WindowsMessages...
procedure TXForm.FormCreate(Sender: TObject); begin Application.OnMessage:=AppMessage; end;
procedure TXForm.AppMessage(var Msg: TMsg; var Handled: Boolean); begin if (Msg.Message = WM_SYSCOMMAND) and (not ClientVent) then if (Msg.wParam = SC_SCREENSAVE) or (Msg.wParam = SC_MONITORPOWER) then Handled := true; // prevent screensaver} end;
procedure TXForm.WndProc(var Msg: TMessage); begin inherited; if Msg.Msg = WM_POWERBROADCAST then case Msg.WParam of PBT_APMQUERYSUSPEND : Msg.Result := BROADCAST_QUERY_DENY; PBT_APMQUERYSTANDBY : Msg.Result := BROADCAST_QUERY_DENY; end; end;
det var så lidt :) er glad for at kunne hjælpe :) selvom det er ved at være længe siden jeg har arbejdet med delphi hehe
Synes godt om
Ny brugerNybegynder
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.