GetLastInputTime显示不可能的时间?

时间:2016-05-13 07:22:51

标签: c# winapi

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

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

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

2 个答案:

答案 0 :(得分:6)

由于GetLastInputTime将{em> ticks 返回为UInt32DWORD

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来获取空闲时间。