如何在Python中禁用或锁定鼠标和键盘?
有没有办法用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()