Entwickler-Ecke

Off Topic - WOL geht nur bei manuellen Ruhezustand


Flamefire - Fr 29.01.10 01:27
Titel: WOL geht nur bei manuellen Ruhezustand
Ich hab einen PC (Dimension 4550) hinter einem Speedport W701v, den ich per WOL fernstarten möchte.
Das geht dummerweise NUR, wenn ich den Netzschalter zum Beenden von windows verwende (In den Energieoptionen ist für den der Ruhezustand eingetragen, geht auch) oder über Start->beenden.
Nur dann reagiert er auf das Magic Packet.

Wenn ich den PC vollkommen runterfahre oder per Befehl ("powrprof.dll,SetSuspendState Hibernate" oder SetSuspendState(true,false,false) ) dann reagiert er gar nicht da drauf.
Warum das? Wie kann ich den per Programm in den "anderen" Ruezustand versetzen?


ALF - Sa 30.01.10 18:16

Hi, hast Du dieses http://msdn.microsoft.com/de-de/library/bb978915.aspx
mal durchgelesen?
Gruss ALf


Flamefire - Sa 30.01.10 19:20

ja.
ich rufe Suspendstate(1,0,0) auf

also sollte es gehn


ALF - Sa 30.01.10 19:35

ist mir doch klar.
ich meine ob Du den Aufruf so machst wie vorgegeben, um die richtige Meldung zu erhalten!
So müsstest Du ja auch die Meldung erhalten, ob es geht oder nicht!

Gruss ALf


Flamefire - So 31.01.10 00:51

Hmm, was meinst du genau?
Am Ende fährt der PC definitiv in den Ruhezustand, nicht standby und fehler sonst werden auch keine ausgegeben


ALF - So 31.01.10 04:02

Für Standby-Modus ist der Übergabewert 0. Nicht 1.

Bei richtigen Aufruf:
Zitat:

Liefert die Funktion SetSuspendState einen Wert ungleich 0 zurück, so war der Aufruf erfolgreich. Bei einer Rückgabe von 0 war der Aufruf erfolglos - die Fehlerursache können Sie dann über die Fehlernummer aus Err.LastDllError ermitteln


Testest Du vorher auf IsPwrHibernateAllowed?

Hast Du die Möglichkeit, Dein Prog auf einen anderen Pc zu testen?

Ansonsten Poste mal die Procedure, sonst wird es nur ein rumraten :?

Gruss Alf


Flamefire - So 31.01.10 12:29

Ich will ja Ruhezustand --> Wert 1
Testen brauche ich nicht, da ich WEIß, dass der Ruhezustand aktiviert ist. Darum entfällt auch eine Prüfung des Rückgabewertes, da der PC offensichtlich in den Ruhezustand fährt.

Code Wäre:

Delphi-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:
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;


Aufruf einer der beiden (bei beiden das gleiche Ergebnis)

Delphi-Quelltext
1:
2:
3:
4:
          //SetSuspendState(true,false,false);
          shellexecute(0,'open','rundll32.exe','powrprof.dll,SetSuspendState Hibernate',
               nil,
               SW_SHOW);


Problem ist NICHT, dass er nicht in den Ruhezustand fährt, sondern dass er sich nicht wieder wecken lässt.
Wenn man den gleichen PC ohne Veränderungen per Start->Beenden->Ruhezustand in den Ruhezustand fährt, funktioniert es aber.


ALF - So 31.01.10 16:25

Hi,

ist ja richtig kompliziert, nicht der Code sondern die einstellungen in Windoof Energieoptionen
Egal was Du für Parameter übergibst,
er führt den code so aus, welche Einstellung in Energieoptionen/Ruhezustand eingestellt ist.
Sobald Du in Energieoptionen/Ruhezustand, das aktivierts, fährt er komplet runter.(er ist ausgeschaltet) warum auch immer.
Unabhängig von Energieoptionen/Erweitert und CodeParameter.

Wenn das Deaktiviert ist, geht er im sogenannten Standby Modus und WOL funct.
Unabhängig was Du in Energieoptionen/Erweitert einstellst oder CodeParameter steht.

:eyes: :nut:

rofl

Gruss ALf


Flamefire - So 31.01.10 16:47

Ich versteh dich nicht.

Nochmal das Problem kurz:

Ausgangszustand: 1 PC läuft, Ruhezustand aktiviert
Aktion: a)Ruhezustand per Start->Ruhezustand
b)Ruehzustand durch obigen Code
Ergebnis: a)PC im Ruhezustand, per WOL weckbar
b)PC im Ruhezustand, nicht per WOL weckbar


ALF - So 31.01.10 17:14

Auch wenn Du mich jetzt für Unwissent hälst

Start->Copmuterauschalten Standby/Ausschalten/Neustarten

Start->Ruhezustand :roll: hab ich nicht, oder nicht aktiv oder welche Einstellung ist das? noch nie gesehen oder benötigt
:oops:

Bitte um Aufklärung. Bevor ich Dir eine Antwort geben kann.
Es kann ja sein, das ich was in windows noch nicht kenne :wink:

Gruss ALf


Boldar - So 31.01.10 17:18

Wenn der Ruhezustand in den Energieoptionen aktiviert ist, wird der Knopf durch drücken von [SHIFT] sichtbar.


Flamefire - So 31.01.10 17:33

Richtig. mit shift.
Alternativ: Standbyschalter funktion auf Ruhezustand legen oder über taskmanager. ist alles das gleiche


ALF - So 31.01.10 17:44

Nice, Hab wieder was gelernt :beer:

Ergebnis: a)PC im Ruhezustand, per WOL weckbar.
- Bei mir nicht :hair: keine Ahnung warum. Vermute irgendwas mit Board oder Bios. Rechner ist komplett Down.
- lediglich die Einstellungen (geöffnete Fenster usw.) bleiben erhalten.

b)PC im Ruhezustand, nicht per WOL weckbar. so ist es bei mir auch.

mh.... jetzt bin ich sprachlos und gebe auf :nixweiss: :gruebel:

Gruss Alf


Flamefire - So 31.01.10 18:32

WOL muss aktiviert werden.
BIOS, und unter windows:
gerätemanager: Gerät kann pc ruhezustand wecken. (Eigenschaften vom netzwerkadapter)

Eigendlich funktioniert es bei komplett ausgeschaltetem PC. Leider bei diesem speziellen nur aus dem ruhezustand. seltsam aber ist so


ALF - So 31.01.10 19:03

mh..
Bios, WOL ist aktiv.
Netzwerk Eigenschaft, nur Standbymodus, Ruhezustand nix.
NVIDIA nForce 10/100/1000 MbPs

Man lernt nie aus, welche vielen kleine unterschiede es gibt bei den PC(Boards/Bios NetzKarten).
Damit soll windows nun klar kommen und alles richtig machen :lol:

Nun ist auch klar warum bei einem es funct und bei andern nicht!

Tut mir Leid das ich da nicht Helfen konnte :cry:
Aber teste Dein Prog doch mal auf einem anderen PC!

Gruss Alf