首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中禁用还是锁定鼠标和键盘?

在Python中禁用还是锁定鼠标和键盘?
EN

Stack Overflow用户
提问于 2011-09-23 21:48:40
回答 6查看 30.3K关注 0票数 17

有没有办法使用python禁用或锁定鼠标和键盘?我想冻结鼠标并禁用键盘。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-23 21:55:46

我还没有测试过(实际上我已经测试过鼠标部分了,它工作起来很烦人),但是像这样使用pyhook的东西可以做你想做的事情:

代码语言:javascript
复制
import pythoncom, pyHook 

def uMad(event):
    return False

hm = pyHook.HookManager()
hm.MouseAll = uMad
hm.KeyAll = uMad
hm.HookMouse()
hm.HookKeyboard()
pythoncom.PumpMessages()
票数 25
EN

Stack Overflow用户

发布于 2018-12-20 01:40:37

我将Fábio Diniz的回答扩展为一个类,它同时提供了block()和unblock()函数,用于(选择性地)阻塞鼠标/键盘输入。我还添加了一个超时功能,它(希望)解决了把自己锁在外面的烦恼。

代码语言:javascript
复制
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.")

你可以看看main例程的用法示例。

票数 8
EN

Stack Overflow用户

发布于 2019-01-23 04:52:43

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

代码语言:javascript
复制
from ctypes import *

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

#or 

ok = windll.user32.BlockInput(False) #disable block 
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7529991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档