8

我需要收听蓝牙键盘发送到我的设备的原始命令/按键,如果可能的话,防止它们“传播”到系统的其余部分。

基本上,我用 Node.js 和 coffee-script 编写了一些东西,它接收来自stdin我的飞利浦 Hue 灯泡的按键并控制它。它看起来像这样:

keypress = require 'keypress'

# Setup keypress events
keypress process.stdin

process.stdin.on 'keypress', (character, key) ->

    switch character
        when 'l' then hue.decreaseTemp()
        when 'r' then hue.increaseTemp()
        when 'u' then hue.increaseBri()
        when 'd' then hue.decreaseBri()
        when 'b' then hue.turnOff()

    # Exit on ctrl-c
    if key?.ctrl and key.name is 'c'
        process.stdin.pause()

它的功能有效,但它不是很有用,因为它接收来自标准输入的输入,从而阻止它在后台运行。

在没有焦点的窗口的情况下,我该怎么做才能使这个接收输入?

我的偏好是在我的 Mac 上运行 Node.js 或 Python 中的某些东西,但如果需要,我愿意切换语言或在我的 Raspberry Pi 上运行

4

2 回答 2

5

keypress只监听标准输入流,而不是键盘本身。此输入流由操作系统及其硬件驱动程序处理。通常操作系统不希望应用程序直接监听键盘,而是将键盘事件定向到它所关注的程序。

您必须直接处理设备,否则操作系统会将这些输入重定向到另一个焦点程序。您应该为此尝试node-hid。它可以访问附加的人机界面设备,如键盘/鼠标。描述说它适用于 USB 设备,但它应该适用于蓝牙(HID)设备。

其次,由于您正在听硬件,很可能您不会直接收到按键值,而是一堆需要解释的原始输入数据/信号。您将键盘用作遥控器,请准备好将其用作低级设备。

于 2014-09-05T05:58:47.210 回答
1

解决这个问题的一种方法(控制色调而不需要程序在前台)是将色调控制和键盘快捷键拆分到不同的应用程序:

我会简单地编写一个命令行工具,例如。使用节点,它将要运行的命令作为参数。然后我会为命令创建操作系统级别的键盘快捷键。

例如。我会配置 Command-Shift-+ 来调用huecontrol increasebri. Huecontrol 会做的是事情并退出。

于 2014-09-08T13:51:07.980 回答