Entwickler-Ecke

Windows API - Windows XP in den Ruhezustand fahren


maxk - Do 08.08.02 12:55
Titel: Windows XP in den Ruhezustand fahren
Hi,
wie kann ich Windows 2000/XP via Delphi in den Ruhezustand fahren? Diese Funktion ist im Windows aktiviert und der angemeldete Benutzer verfügt über die entsprechenden Rechte. Kann mir jemand sagen, wie ich diese Aufgabe bewältigen kann?

Danke für alle Antworten,
maxk


maxk - Fr 09.08.02 10:11
Titel: ADF Components
:oops: Tja, ich habe jetzt in einem anderen Beitrag eine Antwort gefunden. Mit den ADF Components kann man diese Aufgabe bewältigen. Wobei der funktionierende Sourcecode natürlich mal interessant wäre...


cbs - Fr 09.08.02 19:45

oder das hier?

den Standby Modus einschalten (swissdelphicenter.ch) [http://www.swissdelphicenter.ch/de/showcode.php?id=862]


Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  SendMessage(Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 1); 
end;


test it


Arakis - Mi 14.08.02 14:19

cbs hat folgendes geschrieben:
oder das hier?

den Standby Modus einschalten (swissdelphicenter.ch) [http://www.swissdelphicenter.ch/de/showcode.php?id=862]


Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  SendMessage(Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 1); 
end;


test it


StandBy-Modus und Ruhestand ist nicht das selbe. Beim Ruhezustand wird der RAM + CPU-register komplett auf Festplatte geschrieben und der Strom kann aus. Beim StandBy-Modus wird der computer nur auf minimalem Energie-Modus gebracht, so ziemlich alles schaltet sich ab, nur der RAM und die CPU-Register müssen noch weiterhin unter Strom stehen.

Folgende Info gibt es dazu bei MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/power/power_84md.asp
Da brauchtst du aber vermutlich eine überstzte version der Powrprof.h, die du dir aber irgendwo bei http://www.delphi-jedi.org runterladen kannst.

Bis dann
user defined image


toms - Mi 14.08.02 14:57

Probier's mal so:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
var
  _SetSuspendState: function (Hibernate, ForceCritical, DisableWakeEvent: BOOL): BOOL
  stdcall = nil;

  function LinkAPI(const module, functionname: string): Pointer; forward;

function SetSuspendState(Hibernate, ForceCritical,
  DisableWakeEvent: Boolean): Boolean;
begin
  if not Assigned(_SetSuspendState) then
    @_SetSuspendState := LinkAPI('POWRPROF.dll', 'SetSuspendState');
  if Assigned(_SetSuspendState) then
    Result := _SetSuspendState(Hibernate, ForceCritical,
      DisableWakeEvent)
  else
    Result := False;
end;

function LinkAPI(const module, functionname: string): Pointer;
var
  hLib: HMODULE;
begin
  hLib := GetModulehandle(PChar(module));
  if hLib = 0 then
    hLib := LoadLibrary(PChar(module));
  if hLib <> 0 then
    Result := getProcAddress(hLib, PChar(functionname))
  else
    Result := nil;
end;

// Beispielaufruf:

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetSuspendState(True, False, False);
end;


tom


cbs - Mi 14.08.02 19:15

@Arakis: ok danke für die info, war mir nicht klar das es da unterschiede gibt


maxk - Fr 16.08.02 10:05

@toms: Danke, ich werde das Script mal testen


Bela Urlaub - Di 27.05.03 22:56

Geht das bei allen Windows?


maxk - Mi 28.05.03 11:22

Bela Urlaub hat folgendes geschrieben:
Geht das bei allen Windows?

Klares Jein! Der Ruhezustand ist ab Windows 98 verfügbar, funktioniert (nach eigener Erfahrung) aber nur auf wenigen Rechnern. Hier sollte mal lieber externe Programme benutzen, die den Speichern "capturn". Ab Windows 2000 funktioniert der Ruhezustand auf allen Computern (muss natürlich vorher aktiviert werden).

maxk


BoMbY - Do 05.06.03 10:35

Hallo,

Du könntest es auch mal über die "Windows Native API Interface Unit" und die Funktion

NtSetSystemPowerState(PowerActionHibernate, PowerSystemUnspecified, 0);

versuchen.

Die Unit bekommt man hier: http://members.chello.nl/m.vanbrakel2/

Ich nehme an man braucht dafür auch das SE_SHUTDOWN_NAME privilege, ich hab die Funktion selber nie ausprobiert...

m.f.g.
BoMbY