PC aus Ruhezustand wecken

Hallo alle zusammen,

das Thema gab es schon ein paar mal hier im Forum aber nie mit einer Lösung die ich verwenden konnte.

Ich möchte mittels einer Applikation (geschrieben in C#) meinen Laptop mit WinXP in den Ruhezusand versetzten und diesen zu einer bestimmten Zeit wieder wecken.

In habe hier eine kleine DLL und eine Anleitung für VB gefunden und das ganze mal folgendermaßen impelementiert:
Code:
    class Program
    {

        [DllImport("PowrProf.dll")]
        public static extern bool SetSuspendState(bool Hibernate, bool ForceCritical, bool DisableWakeEvent);

        static void Main(string[] args)
        {
            int timer_day = DateTime.Now.Day;
            int timer_month = DateTime.Now.Month;
            int timer_year = DateTime.Now.Year;
            int timer_hour = DateTime.Now.Hour;
            int timer_minute = DateTime.Now.Minute+2;
            int timer_second = DateTime.Now.Second;
            Thread t = new Thread(new ThreadStart(tuwas));
            t.Start();

            //DateTime wakeuptime = new DateTime(timer_year, timer_month, timer_day, (timer_hour - (DateTime.Now.Hour - DateTime.UtcNow.Hour)), timer_minute, timer_second);
            DateTime wakeuptime = new DateTime(timer_year, timer_month, timer_day, timer_hour, timer_minute, timer_second);
            Console.WriteLine(String.Format("StartUp was set to {0}!", wakeuptime));
            Wake.SetWaitForWakeupTime(wakeuptime);
        }


        public static void tuwas()
        {
            Console.WriteLine("Waiting 10 seconds...");
            Thread.Sleep(10000);
            Console.WriteLine("Starting SetSuspendState ...");
            SetSuspendState(true, true, false);
        }

    }

Getestet habe ich das ganze wie in dem Link beschrieben einmal mit der UTC-Zeit und einmal mit der UTC+1-Zeit.

Ruhezustand ist aktiviert und der PC fährt auch runter aber startet nicht wieder.

Hat jemand eine Idee wie es funktionieren kann?

Gruß
meinereiner
 
Ich laß mir gerne etwas Neues beibringen (und hoffe, Jemand schreibt etwas zu der Frage), aber ich verstehe nicht, wie ein Programm, dass auf einem ausgeschalteten Rechner (nicht) läuft, diesen anmachen können soll. Es steht außer Frage, dass das BIOS so etwas kann, aber dies?! Ich bin verwirrt..

mfg chmee

p.s.: Ah, habe grad in den Link geschaut. Weckzeit im Bios einstellen und dann ausschalten, verstehe.. Hast Du den Link komplett durchgelesen? Ich denke, dass dort so ziemlich alle Fragen beantwortet werden.
 
Würde ich auch sagen. Wenn der PC aus ist, dann ist er aus. Und Ruhemodus == aus. Du könntest den StandBy-Modus anstatt Ruhemodus verwenden. Dann ließe sich der PC wohl reaktivieren.

EDIT: Hatte chmees p.s. nicht gelesen...
EDIT2: Habe mir den Link durchgelesen aber wurde nicht unbedingt daraus schlau, warum der obige Code nicht funktioniert. Einzige was mir auffällt: du verwendest keine UTC-Zeit
EDIT3: Ah du hast geschrieben du würdest UTC manuell eingeben...Hm
EDIT4: Auf der Seite steht geschrieben:
Sub SetWaitForWakeupTime: Stellt eine UTC-Zeit ein, zu der der Rechner aus dem Stromsparmodus aufwacht.
Vielleicht gilt es dann nicht für den Ruhezustand? Also wenn ich mir die MSDN zur verwendeten API SetWaitableTimer anschaue, dann steht da
fResume [in]: If this parameter is TRUE, restores a system in suspended power conservation mode when the timer state is set to signaled. [...]
Es wird also nur für den StandBy-Modus und nicht für den Ruhezustand funkionieren!
EDIT5: Also der Aufruf von
Code:
wh.WaitOne()
in der Wake-Library scheint mir irgendwie fehlplatziert. MSDN sagt:
Blocks the current thread until the current System.Threading.WaitHandle receives a signal.
Ich würde das mal rausnehmen, es erscheint mir irgendwie sinnlos?! Vllt wird die ganze Anwendung und nicht nur der Thread blockiert? Ich werde daraus gerade nicht schlau.
 
Zuletzt bearbeitet:
Hallo,

Danke für eure Hilfe.
Ich habe noch ein bisschen experimentiert mit den Punkten die ihr hier aufgelistet hat.
Leider mit keinem Erfolg.

Ich werde mir erstmal eine kleine Software suchen, die die Funktion schon implementiert hat. Vielleicht ist das auch ein prinzipielles Problem meines BIOS oder Betriebssystems.

Gruß
meinereiner
 
Zurück