python - 使用ctypes函数在python中绑定(bind)键事件

标签 python linux keyboard

我一直在尝试使用 python 将我的自定义事件绑定(bind)到具有特定事件代码编号的键盘事件,如下所示

ctypes.windll.user32.keybd_event('0x24',0,2,0)

但是你已经知道了

windll

该库仅适用于 Windows 操作系统。 我怎样才能在 Linux 机器上做这样的事情? 我读过

CDLL('libc.so.6')

但我不知道这个库是否有用?

是否有另一种方法可以使用虚拟键码在操作系统级别使用 python 设置按键监听器?

最佳答案

Linux输入子系统由三部分组成:驱动层、输入子系统核心层和事件处理层。 而键盘或其他输入事件都由input_event描述。

使用下面的代码并在终端中输入 python filename.py | grep“键盘”

#!/usr/bin/env python
#coding: utf-8
import os

deviceFilePath = '/sys/class/input/'

def showDevice():
    os.chdir(deviceFilePath)
    for i in os.listdir(os.getcwd()):
        namePath = deviceFilePath + i + '/device/name'
        if os.path.isfile(namePath):
            print "Name: %s Device: %s" % (i, file(namePath).read())

if __name__ == '__main__':
    showDevice()

您应该得到名称:event1 设备:AT Translated Set 2 keyboard。 然后使用

#!/usr/bin/env python
#coding: utf-8
from evdev import InputDevice
from select import select

def detectInputKey():
    dev = InputDevice('/dev/input/event1')

    while True:
        select([dev], [], [])
        for event in dev.read():
            print "code:%s value:%s" % (event.code, event.value)


if __name__ == '__main__':
    detectInputKey()

evdev 是一个为 Linux 中的通用输入事件接口(interface)提供绑定(bind)的包。 evdev 接口(interface)用于将内核中生成的事件通过通常位于/dev/input/中的字符设备直接传递到用户空间。selectselect

关于python - 使用ctypes函数在python中绑定(bind)键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47412460/

相关文章:

linux - 如何再次查看 Flutter CLI 首次运行欢迎屏幕

linux - 使用命令行工具合并两个音频文件

android - 在带有角度的 native 脚本中,当键盘打开时,它将我的元素(操作栏)推出屏幕(ANDROID)

python - 如何获取 Python Pillow (PIL) 版本?

python - 从带有具有列表值的键的字典创建一个新的字典列表

linux - 用新的 UUID 字符串替换所有 UUID 字符串

python - 如何避免 python Tkinter 中的键盘冲突?

android - 如果键盘通过 native 触摸关闭,我如何获得 iPhoneKeyboard.done?

python - 基于算法创建简单的线条图

javascript - 无法使用 Selenium webdriver、python 在 <span> 标记内模拟 onclick javascript