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

Python键鼠禁用代码失效及跨脚本调用问题求助

解决键鼠禁用失效及跨脚本调用问题

先拆解下你原代码里的核心问题,这俩问题直接导致了键鼠没被正确拦截,还没法被其他脚本调用:

  • 钩子回调里用time.sleep(1)是致命错误!pyHook的钩子回调是在系统消息线程里执行的,sleep会直接阻塞整个消息泵,后续的键鼠事件根本没机会被钩子捕获,自然没法拦截。
  • 代码直接运行pythoncom.PumpMessages()会阻塞主进程,其他脚本调用后就卡在这行,根本没法继续执行其他逻辑。
  • 还有一行无效代码time.perf_counter,纯属多余,没起到任何作用。

修复后的键鼠禁用代码

我调整了逻辑,用线程隔离消息泵避免阻塞,同时去掉回调里的sleep,改用时间戳判断拦截时长:

import pythoncom
import pyHook
import time
import threading

class InputBlocker:
    def __init__(self):
        self.start_time = 0
        self.block_duration = 0
        self.hm = pyHook.HookManager()
        self.hm.MouseAll = self._block_input
        self.hm.KeyAll = self._block_input
        self.is_blocking = False

    def _block_input(self, event):
        # 检查是否仍在阻塞时长内
        if time.time() - self.start_time < self.block_duration:
            return False  # 返回False拦截当前输入事件
        else:
            # 时长到了自动解除钩子
            if self.is_blocking:
                self.hm.UnhookMouse()
                self.hm.UnhookKeyboard()
                self.is_blocking = False
            return True

    def block_for(self, seconds):
        if self.is_blocking:
            return  # 避免重复触发阻塞
        self.block_duration = seconds
        self.start_time = time.time()
        self.is_blocking = True
        # 挂载钩子
        self.hm.HookMouse()
        self.hm.HookKeyboard()
        # 子线程运行消息泵,不阻塞主进程
        threading.Thread(target=pythoncom.PumpMessages, daemon=True).start()

跨脚本调用方法

把上面的代码保存为input_blocker.py,然后在其他Python脚本里这样调用:

from input_blocker import InputBlocker
import time

# 初始化拦截器
blocker = InputBlocker()
print("开始禁用键鼠10秒...")
# 触发10秒拦截
blocker.block_for(10)
# 这里可以正常执行其他代码,不会被阻塞
time.sleep(11)
print("键鼠禁用已结束")

额外注意事项

  • 确保pyHook版本和你的Python位数(32/64位)匹配,不然钩子可能无法正常挂载。
  • Windows 10/11系统下建议以管理员权限启动Python,否则可能拦截不到部分系统级输入事件。
  • 子线程用了daemon=True,主进程退出时子线程会自动终止,避免残留后台进程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:46:42