Avatar billede -bomann- Nybegynder
28. juli 2003 - 22:52 Der 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...
Avatar billede TRoXa Novice
29. juli 2003 - 04:15 #1
http://www.bsdg.org/swag/DELPHI/0380.PAS.html <-- det skulle vist kunne gøre det :)
Avatar billede -bomann- Nybegynder
29. juli 2003 - 09:16 #2
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...
Avatar billede TRoXa Novice
29. juli 2003 - 11:54 #3
en natkørsel af hvad ?
Avatar billede -bomann- Nybegynder
29. juli 2003 - 12:00 #4
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...
Avatar billede TRoXa Novice
29. juli 2003 - 12:00 #5
SC_CLOSE, SC_HSCROLL, SC_MAXIMIZE, SC_MINIMIZE, SC_MOUSEMENU, SC_MOVE, SC_NEXTWINDOW, SC_PREVWINDOW, SC_RESTORE, SC_SCREENSAVE, SC_SIZE, SC_TASKLIST, SC_VSCROLL

det er dem der er af den slags konstanter, så deri er den vist ikke .. men det må kunne gøres på en anden måde ..

det ville hjælpe mig meget hvis jeg fik lidt mere at vide om hvad programmet helt præcist skal bruges til
Avatar billede TRoXa Novice
29. juli 2003 - 12:03 #6
men for fx, at få computere til at gå i standby skriver man

SendMessage(Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 1);

dvs .. standby har noget med SC_SCREENSAVE at gøre ..
Avatar billede -bomann- Nybegynder
29. juli 2003 - 12:04 #7
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.... :)
Avatar billede TRoXa Novice
29. juli 2003 - 12:04 #8
http://www.swissdelphicenter.ch/torry/showcode.php?id=939 <-- på den står der hvordan man får et program til at forhindre computeren i at slukke .. måske du kan bruge det til noget
Avatar billede -bomann- Nybegynder
29. juli 2003 - 12:05 #9
Hmm... Så system Standby er måske inkluderet i???
Avatar billede TRoXa Novice
29. juli 2003 - 12:08 #10
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

http://www.torry.net/vcl/system/otherhardware/pwrsave.zip
Avatar billede TRoXa Novice
29. juli 2003 - 12:08 #11
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 .. :)
Avatar billede TRoXa Novice
29. juli 2003 - 12:09 #12
komponenten er til Delphi 4,5,6 og 7
Avatar billede TRoXa Novice
29. juli 2003 - 12:10 #13
og source koden er i så du evt kan aflæse den hvis du ikke vil bruge komponenter :)
Avatar billede -bomann- Nybegynder
29. juli 2003 - 12:39 #14
...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...
Avatar billede TRoXa Novice
29. juli 2003 - 12:40 #15
okay :)
Avatar billede razersedge Nybegynder
29. juli 2003 - 13:23 #16
Hm.. måske et lille hack, men kunne du ikke bare flytte musen en pixel hvert minut? :)

Evt. i forskellige retninger så du ikke stopper helt ude i siden på et tidspunkt.
Avatar billede -bomann- Nybegynder
29. juli 2003 - 14:36 #17
Så virker skidtet :)

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

const
  // APM messages
  PBT_APMQUERYSUSPEND      = $0000;
  PBT_APMQUERYSTANDBY      = $0001;

Private 
  procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
  procedure WndProc(var Msg: TMessage); 

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;

Tak for hjælpen troxa :)
Avatar billede TRoXa Novice
29. juli 2003 - 14:49 #18
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
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