Resume per WaitableTimer
-
Hallo Zusammen
Anliegen:
Ich möchte mein System nach einer gewissen Zeit aus dem Standby oder dem Energiesparmodus,... zurückholen.Was Funktioniert:
Derzeit bin ich in der Lage, zu einem gewünschten Zeitpunkt das obere Anliegen durchzuführen. Dies funktioniert bei Windows XP wie auch bei Windows Vista, Desktop-PCs und Notebooks. Jedoch habe ich noch 3 Fragen.Fragen:
1. Erstelle ich den WaitableTimer unter Vista auf einem Notebook und wechsle in den Energiesparmodus, so kann sich der Computer wieder reaktivieren. Mach ich jedoch das Selbe und schliesse noch den Deckes des Laptops, so startet er nicht mehr auf. Gibt es da eine bestimmte Einstellung im BIOS, BS,... oder ist dies ein fortgeschrittener Energiesparmodus
der diese Funktion nicht mehr unterstützt? 
2. Wenn der Computer aus dem Standby-Modus zurückkehrt, so bleibt der Bildschirm schwarz. Zudem kehrt er nach ca. 1 Minute wieder in den Standby-Modus,... zurück. Gibt es da eine Möglichkeit, diese Zeit zu verlängern oder den Bildschirm aktiv zu schalten. (Hatte es auch schon vergeblich versucht, indem ich Via Code die Maus gesteuert oder eine Taste gedrückt habe.
3. Erstelle ich den Timer per CreateWaitableTimerW statt CreateWaitableTimerA, so funktioniert das Ganze überhaupt nicht mehr. (Ist nicht wichtig: Wäre aber Froh, wenn jemand die Antwort Wüsste
)Code:
Hier vielleicht noch ein kleiner Code-Ausschnitt, der den Timer erstellt:
Ich denke, dass die untersten 3 Zeilen die relevantesten sind.void __fastcall TF_Hauptformular::vf_CreateWakeTimerForSuspendMode() { TDateTime dtWakeUp; SYSTEMTIME stSystemTime; FILETIME flFileTime; LARGE_INTEGER lgiInterval; double dAddTime; //Löschen des Timers, wenn dieser bereits vorhanden ist if (G_hwWakeTimer) { CancelWaitableTimer(G_hwWakeTimer); CloseHandle(G_hwWakeTimer); } //Berechnen des Meldedatums GetSystemTime(&stSystemTime); dAddTime=(StrToDateTime(G_clSystemWakeUpTask.sTaskDate + L" " + G_clSystemWakeUpTask.sTaskRingTime,G_tfsDateFormat).Val-Date().CurrentDateTime().Val); dtWakeUp = StrToDateTime(IntToStr(stSystemTime.wDay) + L"." + IntToStr(stSystemTime.wMonth) + L"." + IntToStr(stSystemTime.wYear) + L" " + IntToStr(stSystemTime.wHour) + L":" + IntToStr(stSystemTime.wMinute) + L":" + IntToStr(stSystemTime.wSecond),G_tfsDateFormat); dtWakeUp.Val += dAddTime; //Setzen der Angaben in die SYSTEMTIME-struktur stSystemTime.wYear = StrToInt(dtWakeUp.FormatString(L"yyyy")); stSystemTime.wMonth = StrToInt(dtWakeUp.FormatString(L"mm")); stSystemTime.wDay = StrToInt(dtWakeUp.FormatString(L"dd")); stSystemTime.wHour = StrToInt(dtWakeUp.FormatString(L"hh")); stSystemTime.wMinute = StrToInt(dtWakeUp.FormatString(L"nn")); stSystemTime.wSecond = StrToInt(dtWakeUp.FormatString(L"ss")); stSystemTime.wDayOfWeek = dtWakeUp.DayOfWeek(); //Umwandlung von SYSTEMTIME in FILETIME SystemTimeToFileTime(&stSystemTime,&flFileTime); // Konvertiert die systime-Variable in eine FILETIME-Variable lgiInterval.LowPart=flFileTime.dwLowDateTime; lgiInterval.HighPart=flFileTime.dwHighDateTime; //Erstellen des Timers G_hwWakeTimer=CreateWaitableTimerA(NULL,true,"Test"); if (G_hwWakeTimer) SetWaitableTimer(G_hwWakeTimer,&lgiInterval,0,NULL,NULL,true); }Vielen Dank für eure Aufmerksamkeit.
-
Deforation schrieb:
2. Wenn der Computer aus dem Standby-Modus zurückkehrt, so bleibt der Bildschirm schwarz. Zudem kehrt er nach ca. 1 Minute wieder in den Standby-Modus,... zurück. Gibt es da eine Möglichkeit, diese Zeit zu verlängern oder den Bildschirm aktiv zu schalten.
Ich fand das Verhalten eigentlich ganz nett fürs nächtliche Mails-Holen.
Was Du suchst ist bestimmt in der Power Management API. http://msdn.microsoft.com/en-us/library/bb968807(VS.85).aspx
Sagt bescheid, welche es ist, wenn Du sie gefunden hast.