我正在尝试从Windows计算机上的Python中计算出当前用户大约闲置了多长时间(例如this question)。
为此,我认为我需要将GetLastInputInfo的结果与的结果进行比较
GetTickCount。结果应以毫秒为单位。
(我预计每49.7天会发生滚动问题,但稍后会解决。)
我的代码很简单:
import win32api
last_active = win32api.GetLastInputInfo()
now = win32api.GetTickCount()
elapsed_milliseconds = (now - last_active)
print(last_active, now, elapsed_milliseconds)
我希望得到两个相似的大数,并且相差几百毫秒。
相反,我得到如下结果:
3978299058 -316668238 -4294967296
和
3978316717 -316650501 -4294967218
在两次运行之间,它们的变化量大致相同,但是它们之间有一个很大的恒定偏移量,这是我所期望的。
我想念什么?
最佳答案
仔细观察数字,这是有符号/无符号不匹配。
3978299058 = 0xED2006B2
-316668238(二进制补码)= 0xED2006B2
3978316717 = 0xED204BAD
-316650501(以二进制补码)= 0xED204BFB
因此时间是一致的,只是win32.GetTickCount
将滴答计数解释为有符号的32位整数,而win32.GetLastInputInfo
则将滴答计数解释为无符号。
(具体来说,GetLastInputInfo
使用的是PyLong_FromUnsignedLong
,而GetTickCount
将DWORD
转换为long
,然后调用Py_BuildValue
。您可能要考虑提交错误,因为滴答计数应为无符号值。)