ctypes 结果不一致 - GetAsyncKeyState 函数

问题描述 投票:0回答:1
import ctypes

def mouse_released() -> bool:
    mouse_state = ctypes.windll.user32.GetAsyncKeyState(0x01)
    if mouse_state:
        while ctypes.windll.user32.GetAsyncKeyState(0x01):
            continue  # is pressing
        else:
            print('released')
            return mouse_state != 0 # released
    return False

while True:
    mouse_released()

该程序告知鼠标左键是否被释放。

问题:一般来说它工作正常。但有时一开始它会打印“已释放”,即使几秒钟前没有按下任何按钮。

我尝试用

GetAsyncKeyState
更改
GetKeyState
。它似乎解决了提到的问题,但是这样,该函数指示仅每秒按下一次按钮,这对我来说完全是个谜。

python python-3.x ctypes
1个回答
0
投票

考虑到所有的评论,这是我想出的工作方法:

from win32api import GetKeyState

def mouse_released():
    pressed = GetKeyState(0x01) < 0
    if pressed:
        while GetKeyState(0x01) < 0:
            continue # Wait until the button is released
    return pressed
© www.soinside.com 2019 - 2024. All rights reserved.