如何知道是否按下了鼠标左键

How to know if the left mouse click is pressed

我正在使用 PyAutoGUI 库。我如何知道是否按下了鼠标左键?

这就是我想要做的:

if(leftmousebuttonpressed):
   print("left")
else:
   print("nothing")

我认为您不能使用 PyAutoGui 来监听鼠标点击。

改为尝试 Pyhook(从他们的源页面):

import pythoncom, pyHook

def OnMouseEvent(event):
    # called when mouse events are received
    print 'MessageName:',event.MessageName
    print 'Message:',event.Message
    print 'Time:',event.Time
    print 'Window:',event.Window
    print 'WindowName:',event.WindowName
    print 'Position:',event.Position
    print 'Wheel:',event.Wheel
    print 'Injected:',event.Injected
    print '---'

# return True to pass the event to other handlers
    return True

# create a hook manager
hm = pyHook.HookManager()
# watch for all mouse events
hm.MouseAll = OnMouseEvent
# set the hook
hm.HookMouse()
# wait forever
pythoncom.PumpMessages()

我相信你能做到:

import pyHook, pythoncom

def left_down():
    print("left down")

def right_down():
    print("right down")

hm = pyHook.HookManager()
hm.SubscribeMouseLeftDown(left_down)
hm.SubscribeMouseRightDown(right_down)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()

他们也做键盘事件,去看看他们的 api 就知道了。

编辑: 这是他们的迷你教程:https://sourceforge.net/p/pyhook/wiki/PyHook_Tutorial/

此外,PyHook 仅适用于 windows(感谢 John Doe 指出)

(我是 PyAutoGUI 的作者。)我可以确认目前 PyAutoGUI 无法 read/record 单击或击键。这些功能在路线图上,但目前没有专门针对它们的任何资源或时间表。

如何知道是否按下了鼠标左键?

受原始文档启发的代码的简单版本:

from pynput import mouse

def on_click(x, y, button, pressed):
    if button == mouse.Button.left:
        print('{} at {}'.format('Pressed Left Click' if pressed else 'Released Left Click', (x, y)))
        return False # Returning False if you need to stop the program when Left clicked.
    else:
        print('{} at {}'.format('Pressed Right Click' if pressed else 'Released Right Click', (x, y)))

listener = mouse.Listener(on_click=on_click)
listener.start()
listener.join()

就像上面评论中提到的 Sir Al Sweigart 一样,我寻找了完美运行的 pynput 模块。请参阅 文档PyPi 说明:

使用 pip 安装库:pip install pynput

监控其他事件(例如鼠标移动、单击、滚动)

请参阅原始文档中 监视鼠标 标题下的代码。 https://pynput.readthedocs.io/en/latest/mouse.html#monitoring-the-mouse

您可以使用 win32api,它是一个 built-in 库,如下例所示:

import win32api

if win32api.GetKeyState(0x01)<0: #if mouse left button is pressed
   #do something
else: #if mouse left button is not pressed
   #do something

至于为什么这段代码的功能是这样的,解释如下:

你做“<0”是因为 GetKeyState 函数 return 要么是负数,要么是 1 或 0,1 或 0 是指当按钮被释放时,它会在你每次放开时改变,并且负数表示按下按钮时的情况,例如,如果鼠标按钮现在使用 GetKeyState 函数 return 为 0 并且您按下它将 return 一个负数,直到您放开并然后它会 return 1,如果它是 1 并且你按下按钮它会 return 一个负数,同时你按住它然后一旦你松开它会回到 0(您可以打印(GetKeyState(0x01)并自己查看以便更好地理解),至于“0x01”那是鼠标左键的虚拟键码,您可以找到鼠标上每个按钮的所有虚拟键码和使用此站点的键盘由微软自己提供 https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes