【问题标题】:How can I block specific keyboard keys using python's keyboard module?如何使用 python 键盘模块阻止特定的键盘键?
【发布时间】:2021-12-23 12:41:28
【问题描述】:

我一直在尝试在 Windows 10 上制作一个程序,当我离开屏幕时阻止人们使用我的屏幕。我知道开始菜单中有“锁定”选项,但我的公司出于某种原因阻止使用它。

我使用 tkinter 制作了全屏黑屏,除非您输入密码或插入物理安全密钥,否则无法退出全屏。 但我知道人们看到这个,只会按下 windows 键并关闭窗口。

所以我想尝试制作它,以便我可以暂时禁用特定键,例如 ALT、DEL、CTRL 和所有功能键,这样就无法使用键盘快捷键关闭它。我也意识到人们可以使用物理开关关闭我的电脑。我确实希望启用所有字母、数字、符号和大写锁定键,以便用户可以输入密码。

我知道使用keyboard.block_key() 执行此操作的方法,但我不知道将哪些值放入括号中以仅阻止CTRL、ALT、DEL、SHIFT、Windows 键、ESC 和所有功能键。我不确定它是我为键码/ID 输入的整数还是我输入的字符串。

如果有人可以提供帮助,将不胜感激!

【问题讨论】:

  • 没有办法完全按照您的描述进行,因为给 python 程序提供对操作系统的控制级别将非常危险。如果在您离开时有人碰您的工作是个大问题,请与您的经理交谈

标签: python keyboard keyboard-events


【解决方案1】:

我认为使用 python 程序阻止特定键是不可能的。

对此有不同的方法,您可以运行time.sleep 函数来暂时禁用键盘。

import ctypes
from ctypes
import wintypes

BlockInput = ctypes.windll.user32.BlockInput
BlockInput.argtypes = [wintypes.BOOL]
BlockInput.restype = wintypes.BOOL

blocked = BlockInput(True)
if blocked:
   try:
   pass # do something
finally:
unblocked = BlockInput(False) # unblock in any
case
else :
   raise RuntimeError('Input is already blocked by another thread!')

上面是我编写的一个示例程序,用于阻止 Windows 上的键。除了 pass 函数,您可以将其替换为您想要执行的代码。 (例如:等待单位输入您的物理安全密钥)

这是一种差异化方法,以后更容易添加:

import time
class keyboardDisable():

    def start(self):
        self.on = True

    def stop(self):
        self.on = False

    def __call__(self): 
        while self.on:
            msvcrt.getwch()


    def __init__(self):
        self.on = False
        import msvcrt

disable = keyboardDisable()
disable.start()
time.sleep(10)
disable.stop()

如果这真的是工作中的大问题,我建议设置一个键盘记录器,看看是否有人真的在弄乱你的电脑,然后向你的老板报告。

【讨论】:

  • 啊,谢谢!这应该有助于我的情况。我已经报告给我的老板,他说我应该做我必须做的。但是谢谢你,因为这有帮助。
  • 没问题!如果您觉得有帮助,请接受答案并点赞。祝你好运!
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2021-11-21
  • 2022-11-17
  • 2013-08-23
  • 2022-01-04
  • 2023-01-18
  • 1970-01-01
相关资源
最近更新 更多