按下时win32api.GetAsyncKeyState(0x01)返回-32768而不是1

时间:2019-05-21 19:42:41

标签: python winapi pyautogui

我今天尝试使用win32api,它只说如果按下该键,GetAsyncKeyState将返回1;否则,则返回0。

但是当我用鼠标左键运行它时,它返回-32768吗? 我通过打印上述命令发现了这一点。 它不会破坏任何内容,因为我只能说是否leftmouse ==-32768,但这仍然让我有些困惑。你能告诉我为什么吗?

2 个答案:

答案 0 :(得分:1)

documentation说:

  

如果设置了最高有效位,则按键按下。

有符号整数中的最高有效位是符号位。因此,您可以将其理解为表明如果按下该键,该函数将返回负值。

您不应测试== -32768,而应测试< 0

答案 1 :(得分:0)

documentation指出:

  

如果设置了最高有效位,则该键处于按下状态;如果设置了最低有效位,则在上次调用GetAsyncKeyState之后按下了该键。

-32768是0x8000,这意味着高位已设置。这与您对“我用鼠标左键运行它”的描述相符。您按住按钮不放,这就是GetAsyncKeyState()报告的内容。不论显示的内容是“如果按下该键,GetAsyncKeyState都将返回1,否则将返回0”。