Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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检测鼠标侧按钮_Python_Pyhook - Fatal编程技术网

如何使用Python检测鼠标侧按钮

如何使用Python检测鼠标侧按钮,python,pyhook,Python,Pyhook,我一直在使用pyhook和单击事件的message属性,但它似乎只能检测到三个标准按钮。 其他人甚至没有找到处理者 是否有办法检测鼠标可能具有的额外按钮?来自以下文档: 鼠标消息的标识符。此参数可以是以下消息之一:WM_lbuttonown、WM_LBUTTONUP、WM_MOUSEMOVE、WM_mouseweel、WM_mouseheel、WM_rbuttonown或WM_RBUTTONUP 由于pyhook使用WH_鼠标钩子,它似乎仅限于这三个按钮 接下来,您可以使用pywin32并跟踪消

我一直在使用pyhook和单击事件的
message
属性,但它似乎只能检测到三个标准按钮。 其他人甚至没有找到处理者


是否有办法检测鼠标可能具有的额外按钮?

来自以下文档:

鼠标消息的标识符。此参数可以是以下消息之一:WM_lbuttonown、WM_LBUTTONUP、WM_MOUSEMOVE、WM_mouseweel、WM_mouseheel、WM_rbuttonown或WM_RBUTTONUP

由于pyhook使用WH_鼠标钩子,它似乎仅限于这三个按钮


接下来,您可以使用pywin32并跟踪消息,据我所知,鼠标按钮4和5会触发该消息。

来自以下文档:

鼠标消息的标识符。此参数可以是以下消息之一:WM_lbuttonown、WM_LBUTTONUP、WM_MOUSEMOVE、WM_mouseweel、WM_mouseheel、WM_rbuttonown或WM_RBUTTONUP

由于pyhook使用WH_鼠标钩子,它似乎仅限于这三个按钮


接下来,您可以使用pywin32跟踪消息,据我所知,鼠标按钮4和5会触发该消息。

鼠标会钩住XButtons,PyHook的dll会将其传递给python,但python端的钩子管理器会忽略它们。但是,您可以跳过HookManager,直接使用cpyHook接口

此示例在按下xbutton事件时将其打印到控制台,并在按下鼠标左键时退出:

from pyHook import cpyHook, HookConstants
import pythoncom
import ctypes
user32 = ctypes.windll.user32

XBUTTON1 = 0x0001
XBUTTON2 = 0x0002

wm = { 0x020B: "WM_XBUTTONDOWN", 0x020C: "WM_XBUTTONUP", 0x0201: "WM_LBUTTONDOWN", }

def mouse_handler(msg, x, y, data, flags, time, hwnd, window_name):
    name = wm.get(msg, None)
    if name:
        xb = data >> 16  # high word indicates which xbutton
        print(name, xb & XBUTTON1, xb & XBUTTON2)
        if name == "WM_LBUTTONDOWN":
            user32.PostQuitMessage(0)
    return True  # True = pass the event to other handlers

try:
    cpyHook.cSetHook(HookConstants.WH_MOUSE_LL, mouse_handler)
    pythoncom.PumpMessages() # returns on WM_QUIT
finally:
    cpyHook.cUnhook(HookConstants.WH_MOUSE_LL)

当鼠标钩住XButtons时,PyHook的dll会将其传递给python,但python端的HookManager会忽略它们。但是,您可以跳过HookManager,直接使用cpyHook接口

此示例在按下xbutton事件时将其打印到控制台,并在按下鼠标左键时退出:

from pyHook import cpyHook, HookConstants
import pythoncom
import ctypes
user32 = ctypes.windll.user32

XBUTTON1 = 0x0001
XBUTTON2 = 0x0002

wm = { 0x020B: "WM_XBUTTONDOWN", 0x020C: "WM_XBUTTONUP", 0x0201: "WM_LBUTTONDOWN", }

def mouse_handler(msg, x, y, data, flags, time, hwnd, window_name):
    name = wm.get(msg, None)
    if name:
        xb = data >> 16  # high word indicates which xbutton
        print(name, xb & XBUTTON1, xb & XBUTTON2)
        if name == "WM_LBUTTONDOWN":
            user32.PostQuitMessage(0)
    return True  # True = pass the event to other handlers

try:
    cpyHook.cSetHook(HookConstants.WH_MOUSE_LL, mouse_handler)
    pythoncom.PumpMessages() # returns on WM_QUIT
finally:
    cpyHook.cUnhook(HookConstants.WH_MOUSE_LL)