如何在Python中禁用或锁定鼠标和键盘?

26 投票
7 回答
50627 浏览
提问于 2025-04-17 02:56

有没有办法用Python来禁用或锁定鼠标和键盘呢?我想让鼠标停止移动,同时禁用键盘。

7 个回答

14

对我来说,仅仅两行代码就解决了这个问题:

from ctypes import *

ok = windll.user32.BlockInput(True) #enable block

#or 

ok = windll.user32.BlockInput(False) #disable block 
16

我对Fábio Diniz的回答进行了扩展,创建了一个类,这个类提供了两个功能:block()和unblock(),它们可以选择性地阻止鼠标和键盘的输入。我还添加了一个超时功能,这样可以解决因为锁定自己而带来的烦恼。

import pyHook 
from threading import Timer
import win32gui
import logging

class blockInput():
    def OnKeyboardEvent(self,event):
        return False

    def OnMouseEvent(self,event):
        return False

    def unblock(self):
        logging.info(" -- Unblock!")
        if self.t.is_alive():
            self.t.cancel()
        try: self.hm.UnhookKeyboard()
        except: pass
        try: self.hm.UnhookMouse()
        except: pass

    def block(self, timeout = 10, keyboard = True, mouse = True):
        self.t = Timer(timeout, self.unblock)
        self.t.start()

        logging.info(" -- Block!")
        if mouse:
            self.hm.MouseAll = self.OnMouseEvent
            self.hm.HookMouse()
        if keyboard:
            self.hm.KeyAll = self.OnKeyboardEvent
            self.hm.HookKeyboard()
        win32gui.PumpWaitingMessages()

    def __init__(self):
        self.hm = pyHook.HookManager()

if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)

    block = blockInput()
    block.block()

    import time
    t0 = time.time()
    while time.time() - t0 < 10:
        time.sleep(1)
        print(time.time() - t0)

    block.unblock()
    logging.info("Done.")

你可以查看主程序,了解如何使用这个功能。

30

我还没有测试过(其实我测试过鼠标的部分,结果它居然正常工作,这让我有点烦),不过像这样用 pyhook 的方法应该能实现你想要的功能:

import pythoncom, pyHook 

def uMad(event):
    return False

hm = pyHook.HookManager()
hm.MouseAll = uMad
hm.KeyAll = uMad
hm.HookMouse()
hm.HookKeyboard()
pythoncom.PumpMessages()

撰写回答