CallNtPowerInformation(..) gibt dir eine
LastWakeTime
an.
Delphi scheint (mal wieder) dafür keine Header zu haben, mit dem CPP Builder geht's aber:
Code:
#include <iostream>
#include <windows.h>
#include <PowrProf.h>
#include <ntstatus.h>
#include <System.SysUtils.hpp>
#include <System.TimeSpan.hpp>
int _tmain(int argc, _TCHAR* argv[])
{
POWER_INFORMATION_LEVEL infoLevel = POWER_INFORMATION_LEVEL::LastWakeTime;
PULONGLONG lastSleepTime = new ULONGLONG();
if( STATUS_SUCCESS != CallNtPowerInformation(infoLevel, NULL, 0, lastSleepTime, sizeof(ULONGLONG)) )
System::Sysutils::RaiseLastOSError();
__int64 msWakeCount = *lastSleepTime / 10 / 1000;
std::cout << "Last wake ms count:"<< msWakeCount << "\n";
std::cout << "GetTickCount64(): " << GetTickCount64() << "\n";
double msDifference = GetTickCount64() - msWakeCount;
TTimeSpan timeSpan = TTimeSpan::FromMilliseconds(msDifference);
std::cout << "System wurde ausgeweckt vor "
<< timeSpan.Hours << " Stunden, "
<< timeSpan.Minutes << " Minuten und "
<< timeSpan.Seconds << " Sekunden.";
std::getchar();
return 0;
}