【问题标题】:win32api.GetAsyncKeyState(0x01) returns -32768 instead of 1 when pressedwin32api.GetAsyncKeyState(0x01) 按下时返回 -32768 而不是 1
【发布时间】:2019-10-08 06:23:45
【问题描述】:

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

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

【问题讨论】:

    标签: python winapi pyautogui


    【解决方案1】:

    documentation 说:

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

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

    你不应该测试== -32768,而应该测试< 0

    【讨论】:

    • 没有。如文档所述,您需要测试最重要的位。可以设置其他位,该值非零,但最高有效位是清除的。如我的回答所述,测试< 0
    【解决方案2】:

    正如documentation 所说:

    如果设置了最高有效位,则按键按下,如果设置了最低有效位,则在上次调用 GetAsyncKeyState 后按下了按键。

    -32768 为 0x8000,表示设置了高位。这符合您对“我用鼠标左键运行它”的描述。您按住按钮,这就是 GetAsyncKeyState() 报告的内容。无论您读到什么“如果按下键,GetAsyncKeyState 将返回 1,否则返回 0”是错误的。

    【讨论】:

    • 谢谢,但我想知道“如果设置了最高有效位”是什么意思?这是我不必担心的事情,还是我应该知道的事情?因为我不确定“位”指的是什么,或者实际上,该句子的任何内容。 @大卫赫弗南
    • @Leno22ß6 是的,如果您至少对“位”是什么、“字节”如何由“位”组成以及“位”和“字节”如何组成有基本的了解,这会有所帮助用于数据类型,如整数
    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 2012-07-13
    • 2011-09-25
    • 2016-04-10
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多