You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Hook鼠标点击并拦截:阻止点击穿透同时处理需求求助

问题描述

我想要在脚本运行期间阻止鼠标点击生效,同时仍能对这些点击进行处理。

目前我可以通过以下代码捕获点击:

import mouse
import time

def mouseHook(event):
    if type(event) == mouse.ButtonEvent:
        print(event)

mouse.hook(mouseHook)
while 1:
    time.sleep(0.25)

但这样仍会让点击穿透生效,请问该如何实现拦截?

*使用场景:模拟一个显示器,当鼠标位于该显示器上时,将所有移动、点击和按键操作发送至MacBook(类似Synergy、Mouse without Borders或Share Mouse工具)


解决方案

要拦截鼠标点击事件、阻止其穿透到系统或其他应用,只需在mouseHook函数中添加返回True的逻辑——mouse库规定,当hook函数返回True时,会阻止当前事件继续传播到系统的后续处理流程,同时你依然可以在函数内部处理捕获到的点击事件。

修改后的基础拦截代码如下:

import mouse
import time

def mouseHook(event):
    if type(event) == mouse.ButtonEvent:
        print(event)
        # 拦截该点击事件,阻止其生效
        return True

mouse.hook(mouseHook)
while 1:
    time.sleep(0.25)

如果需要仅针对模拟显示器区域拦截点击,可以添加坐标判断逻辑,示例如下:

import mouse
import time

# 模拟的显示器区域:左上角坐标(100,100),右下角坐标(800,600)
SIMULATED_DISPLAY_AREA = (100, 100, 800, 600)

def mouseHook(event):
    if type(event) == mouse.ButtonEvent:
        x, y = mouse.get_position()
        # 判断鼠标是否在模拟显示器范围内
        if SIMULATED_DISPLAY_AREA[0] <= x <= SIMULATED_DISPLAY_AREA[2] and SIMULATED_DISPLAY_AREA[1] <= y <= SIMULATED_DISPLAY_AREA[3]:
            print(f"拦截区域内的点击: {event}")
            return True  # 拦截事件
        else:
            print(f"区域外的点击: {event}")
            # 不返回True,事件正常传递

mouse.hook(mouseHook)
while 1:
    time.sleep(0.25)

这种方式能精准实现「指定区域内拦截点击并处理,不影响区域外操作」的效果,适配你的跨设备键鼠共享场景需求。


内容的提问来源于stack exchange,提问作者Yuma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:21:34