GetLastInputTime显示不可能的时间?

len*_*ant 3 c# winapi

为了确定,如果PC没有使用一段时间,我正在使用 Win32API.GetLastInputTime()方法.我只是从DateTime.Now中减去它的值,并将它与存储在设置中的某个值进行比较.

它以前工作得很好,但最近GetLastInputTime开始显示完全荒谬的结果 - 它显示了我未来的时间.今天它向我展示了2016年7月2日.

那么,有没有人有任何想法,发生了什么?如何GetLastInputTime获得时间,以及如何可能,这一次是未来的?

Dmi*_*nko 6

因为GetLastInputTime返回标记UInt32(DWORD)

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724408(v=vs.85).aspx

你可以有一个整数溢出:

经过的时间存储为DWORD值.因此,如果系统连续运行49.7天,时间将回绕到零.要避免此问题,请使用GetTickCount64函数.否则,在比较时间时检查溢出情况.

因此有未来的日期:

   13 May 2016 + 49.7 days == 2 July 2016
Run Code Online (Sandbox Code Playgroud)