Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GetLastInputInfo和GetTickCount不一致_Python_Windows_Pywin32 - Fatal编程技术网

Python GetLastInputInfo和GetTickCount不一致

Python GetLastInputInfo和GetTickCount不一致,python,windows,pywin32,Python,Windows,Pywin32,我试图计算出当前用户在Windows机器上从Python空闲(例如,like)大约多长时间 为此,我想我需要将的结果与的结果进行比较 . 结果应以毫秒为单位 (我预计每49.7天就有一次翻车问题,但我会在以后解决。) 我的代码很简单: import win32api last_active = win32api.GetLastInputInfo() now = win32api.GetTickCount() elapsed_milliseconds = (now - last_active)

我试图计算出当前用户在Windows机器上从Python空闲(例如,like)大约多长时间

为此,我想我需要将的结果与的结果进行比较 . 结果应以毫秒为单位

(我预计每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

在两次运行之间,它们的变化量大致相同,但它们之间有一个很大的恒定偏移量,这是我没有预料到的


我遗漏了什么?

再一次,发布到堆栈溢出是找到我自己问题答案的最快方法

这是一个翻车问题

这两个值在mod 232时非常相似


GetTickCount64是一个更好的调用,但它没有包含在win32API中。

仔细看数字,这是一个有符号/无符号的不匹配

3978299058=0xED2006B2

-316668238(二者的补码)=0xED2006B2

3978316717=0xED204BAD

-31665051(二者的补码)=0xED204BFB

因此时间是一致的,只是
win32.GetTickCount
将滴答计数解释为有符号32位整数,而
win32.GetLastInputInfo
将其解释为无符号整数


(具体地说,代码> GETLASTIN PATIOFION/CODE >使用<代码> PyLang-FurMangSigNeNeNe//C> >而<代码> GETICKCOUNT < /代码>将<代码> dWord <代码>转换为<代码> long < /Cord>,然后调用<代码> PyBuuBudValue。您可能需要考虑提交一个bug,因为TITK计数应该是无符号值。

我不认为使用GetTickCount64会有帮助,因为根据文档,GetLastInputInfo只返回32位的滴答计数。我理解这一理论,但检查pywin32代码(win32apimule.cpp:1671)时,它说“从unsignedlong(lii.dwTime)返回PyLong_”;这看起来是正确的。是的,我应该更仔细地看一下实际数字。问题很简单,一个值返回为unsigned,另一个返回为signed。谢谢
3978316717 -316650501 -4294967218