Power Management Functions

某友人が、Windowsの電源設定の一覧を取得できればいいなー、と言っていたので作ってみた。


PowrProf.lib のリンクも忘れずに。

// power_to_csv.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

void PrintPowerPolicy(const POWER_POLICY &pp); // POWER_POLICY 構造体の出力

int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"japanese"); // for wprintf()

	BOOL result = TRUE;
	int i = 0;
	while(result != FALSE)
	{
		POWER_POLICY pp;
		memset( &pp, 0, sizeof(pp) );
		wprintf(L"----------INDEX %02d---------\n",i++);
		result = ReadPwrScheme( i, &pp );
		PrintPowerPolicy( pp );
	}

	return 0;
}


const wchar_t * PowerStateToString(SYSTEM_POWER_STATE sps)
{
	switch(sps)
	{
	case 0:
		return L"PowerSystemUnspecified";
	case 1:
		return L"PowerSystemWorking";
	case 2:
		return L"PowerSystemSleeping1";
	case 3:
		return L"PowerSystemSleeping2";
	case 4:
		return L"PowerSystemSleeping3";
	case 5:
		return L"PowerSystemHibernate";
	case 6:
		return L"PowerSystemShutdown";
	case 7:
		return L"PowerSystemMaximum";
	default:
		return L"Unknown";
	}
}

const wchar_t * PowerActionToString(POWER_ACTION pa)
{
	switch(pa)
	{
	case 0:
		return L"PowerActionNone";
	case 1:
		return L"PowerActionReserved";
	case 2:
		return L"PowerActionSleep";
	case 3:
		return L"PowerActionHibernate";
	case 4:
		return L"PowerActionShutdown";
	case 5:
		return L"PowerActionShutdownReset";
	case 6:
		return L"PowerActionShutdownOff";
	case 7:
		return L"PowerActionWarmEject";
	default:
		return L"Unknown";
	}
}

const wchar_t * BoolToString(BOOL b)
{
	switch(b)
	{
	case 0:
		return L"FALSE";
	default:
		return L"TRUE";
	}
}

void PrintPowerPolicy(const POWER_POLICY &pp)
{
	wprintf(L"----------MACHINE Setting---------\n");
	wprintf(L"MinSleepAc = %s\n",PowerStateToString(pp.mach.MinSleepAc));
	wprintf(L"MinSleepDc = %s\n",PowerStateToString(pp.mach.MinSleepDc));
	wprintf(L"MinSleepAc = %s\n",PowerStateToString(pp.mach.ReducedLatencySleepAc));
	wprintf(L"MinSleepAc = %s\n",PowerStateToString(pp.mach.ReducedLatencySleepDc));

	wprintf(L"DozeTimeoutAc = %d\n",pp.mach.DozeTimeoutAc);
	wprintf(L"DozeTimeoutDc = %d\n",pp.mach.DozeTimeoutDc);

	wprintf(L"DozeS4TimeoutAc = %d\n",pp.mach.DozeS4TimeoutAc);
	wprintf(L"DozeS4TimeoutDc = %d\n",pp.mach.DozeS4TimeoutDc);
	wprintf(L"DozeTimeoutAc = %d\n",pp.mach.DozeTimeoutAc);

	wprintf(L"MinThrottleAc = %d\n",pp.mach.MinThrottleAc);
	wprintf(L"MinThrottleDc = %d\n",pp.mach.MinThrottleDc);
//	wprintf(L"pad1 = %d\n",pp.mach.MinThrottleAc);
	wprintf(L"OverThrottledAc = %d\n",pp.mach.OverThrottledAc);
	wprintf(L"OverThrottledDc = %d\n",pp.mach.OverThrottledDc);


	wprintf(L"----------User Setting---------\n");

	wprintf(L"IdleAc.Action = %s\n",PowerActionToString(pp.user.IdleAc.Action));
	wprintf(L"IdleAc.EventCode = %x\n",pp.user.IdleAc.EventCode);
	wprintf(L"IdleAc.Flags = %x\n",pp.user.IdleAc.Flags);

	wprintf(L"IdleDc.Action = %s\n",PowerActionToString(pp.user.IdleDc.Action));
	wprintf(L"IdleDc.EventCode = %x\n",pp.user.IdleDc.EventCode);
	wprintf(L"IdleDc.Flags = %x\n",pp.user.IdleDc.Flags);

	wprintf(L"IdleTimeoutAc = %d\n",pp.user.IdleTimeoutAc);
	wprintf(L"IdleTimeoutDc = %d\n",pp.user.IdleTimeoutDc);
	wprintf(L"IdleSensitivityAc = %d\n",pp.user.IdleSensitivityAc);
	wprintf(L"IdleSensitivityDc = %d\n",pp.user.IdleSensitivityDc);

	wprintf(L"ThrottlePolicyAc = %d\n",pp.user.ThrottlePolicyAc);
	wprintf(L"ThrottlePolicyDc = %d\n",pp.user.ThrottlePolicyDc);

	wprintf(L"MaxSleepAc = %d\n",PowerStateToString(pp.user.MaxSleepAc));
	wprintf(L"MaxSleepDc = %d\n",PowerStateToString(pp.user.MaxSleepDc));

	wprintf(L"VideoTimeoutAc = %d\n",pp.user.VideoTimeoutAc);
	wprintf(L"VideoTimeoutDc = %d\n",pp.user.VideoTimeoutDc);

	wprintf(L"SpindownTimeoutAc = %d\n",pp.user.SpindownTimeoutAc);
	wprintf(L"SpindownTimeoutDc = %d\n",pp.user.SpindownTimeoutDc);

	wprintf(L"OptimizeForPowerAc = %s\n",BoolToString(pp.user.OptimizeForPowerAc));
	wprintf(L"OptimizeForPowerDc = %s\n",BoolToString(pp.user.OptimizeForPowerDc));

	wprintf(L"FanThrottleToleranceAc = %d\n",pp.user.FanThrottleToleranceAc);
	wprintf(L"FanThrottleToleranceDc = %d\n",pp.user.FanThrottleToleranceDc);
	wprintf(L"ForcedThrottleAc = %d\n",pp.user.ForcedThrottleAc);
	wprintf(L"ForcedThrottleDc = %d\n",pp.user.ForcedThrottleDc);
}