获取开机时间

1、用当前时间减去从开机到现在经过了的时间:

	DWORD dwStartTicks = GetTickCount() / 1000 / 60;	// 分钟

	SYSTEMTIME sysTime;
	GetSystemTime(&sysTime);

	FILETIME fileTime;
	ULARGE_INTEGER ulTime;
	SystemTimeToFileTime(&sysTime, &fileTime);
	ulTime.HighPart = fileTime.dwHighDateTime;
	ulTime.LowPart = fileTime.dwLowDateTime;

	DWORD dwCurTime = ulTime.QuadPart / (10 * 1000 * 1000 * 60);	// 分钟


这种方法不太精确。

2、利用系统函数 NtQuerySystemInformation:

此函数在NTDLL.DLL中导出。

	typedef struct
	{
		LARGE_INTEGER liKeBootTime;
		LARGE_INTEGER liKeSystemTime;
		LARGE_INTEGER liExpTimeZoneBias;
		ULONG uCurrentTimeZoneId;
		DWORD dwReserved;
	} SYSTEM_TIME_INFORMATION; 

	LONG status;
	SYSTEM_TIME_INFORMATION Sti;

	HMODULE hMod = LoadLibraryW(L"NTDLL.DLL");
	if(hMod)
	{
		typedef NTSTATUS (__stdcall * PFNtQuerySystemInformation)(IN UINT SystemInformationClass,OUT PVOID SystemInformation,IN ULONG SystemInformationLength, OUT PULONG ReturnLength OPTIONAL);

		PFNtQuerySystemInformation pfnNtQuerySystemInformation = (PFNtQuerySystemInformation)GetProcAddress(hMod, "NtQuerySystemInformation");

		if(pfnNtQuerySystemInformation)
			pfnNtQuerySystemInformation(3, &Sti, sizeof(Sti), 0);

		FreeLibrary(hMod);
	}
	DWORD dwCurTime = Sti.liKeBootTime.QuadPart / (1000 * 60); // 分钟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值