要确定,如果PC未使用一段时间,我正在使用Win32API.GetLastInputTime()
方法。我只是从DateTime.Now中减去它的值,并将它与存储在设置中的某个值进行比较。
之前它运作得很好,但最近GetLastInputTime
开始显示出完全荒谬的结果 - 它显示了我未来的时间。今天它向我展示了2016年7月2日。
那么,有没有人有任何想法,发生了什么? GetLastInputTime
如何获得时间,以及如何可能,这次是未来的时间?
答案 0 :(得分:6)
由于GetLastInputTime
将{em> ticks 返回为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
答案 1 :(得分:1)
我认为你不能使用DateTime.Now,因为它取决于时区。
如上所述here,您必须使用Environment.TickCount
来获取空闲时间。