我正在尝试访问电源管理空闲计数器的“TimeRemaining”值。谷歌搜索表明很多人(包括我)可以得到一个值一次,但每次后续调用都会给出相同的结果。没有倒计时,CurIdle 值没有变化......
这是相关代码的简短版本:
#include <windows.h>
#include <tchar.h>
#include <powrprof.h>
typedef struct _SYSTEM_POWER_INFORMATION {
ULONG MaxIdlenessAllowed;
ULONG Idleness;
ULONG TimeRemaining;
UCHAR CoolingMode;
}SYSTEM_POWER_INFORMATION, *PSYSTEM_POWER_INFORMATION;
int _tmain(int argc, _TCHAR* argv[])
{
SYSTEM_POWER_INFORMATION spin;
CallNtPowerInformation(SystemPowerInformation,NULL,0,&spin,sizeof(SYSTEM_POWER_INFORMATION));
_tprintf(_T("MaxIdleness\t%d\t"),spin.MaxIdlenessAllowed);
_tprintf(_T("CurIdle\t%d\t"),spin.Idleness);
_tprintf(_T("TimeRemaining\t%d\n"),spin.TimeRemaining);
return 0;
}
当我从命令行运行它时,我总是得到相同的 MaxIdleness 值(这是意料之中的)、CurIdle (应该改变)和 TimeRemaining (它总是处于最大值...可以理解,因为我正在执行从命令行,但如果我把它放在一个批处理文件中,中间有 sleep.exe,或者放在一个在每次调用 CallNtPowerInformation 之间以“睡眠”进行迭代的程序中,我会得到相同的结果)。
谁能给我一份显示不同 TimeRemaining 和 CurIdle 值的示例代码的副本?