【问题标题】:Detecting the presence/absence of a numeric keypad?检测数字键盘的存在/不存在?
【发布时间】:2012-09-23 04:00:36
【问题描述】:

是否可以判断系统是否连接了数字小键盘?台式机键盘通常具有数字键盘,而笔记本电脑通常没有(尽管它们将数字键盘键放在普通键盘中,并使用 Num Lock 激活)。操作系统是否知道数字键盘的键是否在物理上是分开的?如果是这样,这些信息是否会以某种方式暴露给程序?

了解这一点有助于确定适当的默认键绑定。如果它不可用,那么我将不得不选择一个保守的默认值(不使用数字键盘),这意味着一个稍微令人讨厌的额外配置步骤可以让拥有单独数字键盘的人获得更好的行为,或者我必须选择一个非保守的默认设置并激怒没有数字键盘的人...

【问题讨论】:

    标签: keyboard


    【解决方案1】:

    我不相信您可以查询键盘功能,但 iirc 有一个“数字键盘”键。 ;)

    你应该可以查询Num是打开还是关闭,但是关闭它并不是知道没有数字小键盘的万无一失的方法。

    您可能会做的是检测小键盘上的按键并潜意识地诱使用户这样做,这将识别出所述特征。

    【讨论】:

    • 您实际上可以设置 Numlock 键的状态(请参阅此处的第三个答案:stackoverflow.com/a/938455/159145)。我认为(尽管未经测试)您可以尝试将 Numlock 设置为“on”,然后检测它是否仍然打开 - 如果键盘缺少 numlock 键,那么检查它会显示它的状态为关闭?
    • 不确定是否必须有一个键甚至小键盘才能通过通用 api 启用该键?
    • 是的,我可能错了,因为远程桌面用数字锁定键做了一些有趣的事情,让我觉得这行不通。
    【解决方案2】:

    安装这些软件包

    sudo apt-get install -y numlockx xdotool x11-utils
    

    然后使用这样的脚本

    #!/bin/bash
    cd
    numlockx off &
    rm -f s1.sh s2.sh out
     echo -e "#\041/bin/bash
    sleep 2
    xdotool key KP_5 | xev > out
    exit 0" >> s1.sh
    chmod +x s1.sh
    echo -e "#\041/bin/bash
    sleep 9
    killall -9 xev
    sleep 5
    xdotool key BackSpace
    exit 0" >> s2.sh
    chmod +x s2.sh
    
    
    bash s1.sh &
    bash s2.sh
    
    rm -f s1.sh s2.sh
    if [[ "$(cat out | grep "keycode 84" | grep "KP_Begin" )" != "" ]]; then
      echo "Separated Numpad Detected!"
    fi
    rm out
    exit 0
    

    因为KP_Begin 是数字键盘键KP_5 的键码,当数字锁定未激活时,在带有真正小键盘的真正键盘中。 在 3 台电脑上进行了测试,其中一台带有单独的键盘,另一台没有键盘。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 2013-04-18
      • 2020-03-30
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多