Skip to content

取键盘状态

获取设备内部记录的键盘按键状态,其中包括 8 个修饰键和 7 个普通键。

语法

cpp
class RX784::Device {
    Status getKeyboardState(
        KeyboardState& keyboardState
    );
};
class RX784::Device {
    Status getKeyboardState(
        KeyboardState& keyboardState
    );
};
e
类名基类公开备注
RX784设备
方法名返回值类型公开备注
取键盘状态整数型
参数名类型参考可空数组备注
键盘状态键盘状态
.版本 2 .程序集 RX784设备, , 公开 .子程序 取键盘状态, 整数型, 公开 .参数 键盘状态, 键盘状态, 参考
py
class Device:
    def get_keyboard_state(self) -> Tuple[Status, Optional[KeyboardState]]: ...
class Device:
    def get_keyboard_state(self) -> Tuple[Status, Optional[KeyboardState]]: ...

返回值

名称英文说明
状态码status成功返回
键盘状态keyboard state设备内部记录的键盘按键状态。

类型

cpp
struct RX784::KeyboardState {
    struct ModifierKeys {
        uint8_t controlLeft  : 1;
        uint8_t shiftLeft    : 1;
        uint8_t altLeft      : 1;
        uint8_t OSLeft       : 1;
        uint8_t controlRight : 1;
        uint8_t shiftRight   : 1;
        uint8_t altRight     : 1;
        uint8_t OSRight      : 1;
    };
    ModifierKeys modifierKeys;
    VirtualKeyCode regularKeys[7];
};
struct RX784::KeyboardState {
    struct ModifierKeys {
        uint8_t controlLeft  : 1;
        uint8_t shiftLeft    : 1;
        uint8_t altLeft      : 1;
        uint8_t OSLeft       : 1;
        uint8_t controlRight : 1;
        uint8_t shiftRight   : 1;
        uint8_t altRight     : 1;
        uint8_t OSRight      : 1;
    };
    ModifierKeys modifierKeys;
    VirtualKeyCode regularKeys[7];
};
e
数据类型名公开备注
键盘状态
成员名类型传址数组备注
修饰键键盘状态_修饰键
常规键字节型7
数据类型名公开备注
键盘状态_修饰键
成员名类型传址数组备注
左Ctrl键逻辑型
左Shift键逻辑型
左Alt键逻辑型
左OS键逻辑型
右Ctrl键逻辑型
右Shift键逻辑型
右Alt键逻辑型
右OS键逻辑型
.版本 2 .数据类型 键盘状态, 公开 .成员 修饰键, 键盘状态_修饰键 .成员 常规键, 字节型, , "7" .数据类型 键盘状态_修饰键, 公开 .成员 左Ctrl键, 逻辑型 .成员 左Shift键, 逻辑型 .成员 左Alt键, 逻辑型 .成员 左OS键, 逻辑型 .成员 右Ctrl键, 逻辑型 .成员 右Shift键, 逻辑型 .成员 右Alt键, 逻辑型 .成员 右OS键, 逻辑型
py
@dataclass
class KeyboardState:
    @dataclass
    class ModeiferKeys:
        control_left:  bool
        shift_left:    bool
        alt_left:      bool
        os_left:       bool
        control_right: bool
        shift_right:   bool
        alt_right:     bool
        os_right:      bool

    modifier_keys: ModeiferKeys
    regular_keys:  List[VirtualKeyCode]
@dataclass
class KeyboardState:
    @dataclass
    class ModeiferKeys:
        control_left:  bool
        shift_left:    bool
        alt_left:      bool
        os_left:       bool
        control_right: bool
        shift_right:   bool
        alt_right:     bool
        os_right:      bool

    modifier_keys: ModeiferKeys
    regular_keys:  List[VirtualKeyCode]

示例

cpp
#include <cstdio>
#include "rx784.hpp"

int main() {
    RX784::Device device;
    RX784::Status status;
    RX784::KeyboardState keyboardState;

    device.open("COM1");

    status = device.getKeyboardState(keyboardState);
    if (status == RX784::Status::kSuccess) {
        printf("controlLeft    | %s\n"
               "shiftLeft      | %s\n"
               "altLeft        | %s\n"
               "OSLeft         | %s\n"
               "controlRight   | %s\n"
               "shiftRight     | %s\n"
               "altRight       | %s\n"
               "OSRight        | %s\n",
               keyboardState.modifierKeys.controlLeft  ? "true" : "false",
               keyboardState.modifierKeys.shiftLeft    ? "true" : "false",
               keyboardState.modifierKeys.altLeft      ? "true" : "false",
               keyboardState.modifierKeys.OSLeft       ? "true" : "false",
               keyboardState.modifierKeys.controlRight ? "true" : "false",
               keyboardState.modifierKeys.shiftRight   ? "true" : "false",
               keyboardState.modifierKeys.altRight     ? "true" : "false",
               keyboardState.modifierKeys.OSRight      ? "true" : "false");

        for (size_t i = 0; i < sizeof(keyboardState.regularKeys); i++) {
            printf("regularKeys[%zd] | %hhu\n",
                   i,
                   keyboardState.regularKeys[i]);
        }
    } else {
        printf(RX784::statusToString(status).c_str());
    }

    device.close();
}
#include <cstdio>
#include "rx784.hpp"

int main() {
    RX784::Device device;
    RX784::Status status;
    RX784::KeyboardState keyboardState;

    device.open("COM1");

    status = device.getKeyboardState(keyboardState);
    if (status == RX784::Status::kSuccess) {
        printf("controlLeft    | %s\n"
               "shiftLeft      | %s\n"
               "altLeft        | %s\n"
               "OSLeft         | %s\n"
               "controlRight   | %s\n"
               "shiftRight     | %s\n"
               "altRight       | %s\n"
               "OSRight        | %s\n",
               keyboardState.modifierKeys.controlLeft  ? "true" : "false",
               keyboardState.modifierKeys.shiftLeft    ? "true" : "false",
               keyboardState.modifierKeys.altLeft      ? "true" : "false",
               keyboardState.modifierKeys.OSLeft       ? "true" : "false",
               keyboardState.modifierKeys.controlRight ? "true" : "false",
               keyboardState.modifierKeys.shiftRight   ? "true" : "false",
               keyboardState.modifierKeys.altRight     ? "true" : "false",
               keyboardState.modifierKeys.OSRight      ? "true" : "false");

        for (size_t i = 0; i < sizeof(keyboardState.regularKeys); i++) {
            printf("regularKeys[%zd] | %hhu\n",
                   i,
                   keyboardState.regularKeys[i]);
        }
    } else {
        printf(RX784::statusToString(status).c_str());
    }

    device.close();
}
e
方法名返回值类型公开备注
_启动子程序整数型
变量名类型静态数组备注
设备RX784设备
键盘状态键盘状态
状态码整数型
i整数型
设备.打开 (“COM1”)
状态码 = 设备.取键盘状态 (键盘状态)
如果 (状态码 = #RX784状态码_成功)
    调试输出 (“左Ctrl键 ”, 键盘状态.修饰键.左Ctrl键)
    调试输出 (“左Shift键”, 键盘状态.修饰键.左Shift键)
    调试输出 (“左Alt键  ”, 键盘状态.修饰键.左Alt键)
    调试输出 (“左OS键   ”, 键盘状态.修饰键.左OS键)
    调试输出 (“右Ctrl键 ”, 键盘状态.修饰键.右Ctrl键)
    调试输出 (“右Shift键”, 键盘状态.修饰键.右Shift键)
    调试输出 (“右Alt键  ”, 键盘状态.修饰键.右Alt键)
    调试输出 (“右OS键   ”, 键盘状态.修饰键.右OS键)
计次循环首 (取数组成员数 (键盘状态.常规键), i)
        调试输出 (“常规键[”到文本 (i)“]”, 键盘状态.常规键 [i])
计次循环尾 ()
否则
    调试输出 (RX784状态码到文本 (状态码))
如果结束
设备.关闭 ()
返回 (0)
.版本 2 .子程序 _启动子程序, 整数型 .局部变量 设备, RX784设备 .局部变量 键盘状态, 键盘状态 .局部变量 状态码, 整数型 .局部变量 i, 整数型 设备.打开 (“COM1”) 状态码 = 设备.取键盘状态 (键盘状态) .如果 (状态码 = #RX784状态码_成功) 调试输出 (“左Ctrl键 ”, 键盘状态.修饰键.左Ctrl键) 调试输出 (“左Shift键”, 键盘状态.修饰键.左Shift键) 调试输出 (“左Alt键 ”, 键盘状态.修饰键.左Alt键) 调试输出 (“左OS键 ”, 键盘状态.修饰键.左OS键) 调试输出 (“右Ctrl键 ”, 键盘状态.修饰键.右Ctrl键) 调试输出 (“右Shift键”, 键盘状态.修饰键.右Shift键) 调试输出 (“右Alt键 ”, 键盘状态.修饰键.右Alt键) 调试输出 (“右OS键 ”, 键盘状态.修饰键.右OS键) .计次循环首 (取数组成员数 (键盘状态.常规键), i) 调试输出 (“常规键[” + 到文本 (i) + “]”, 键盘状态.常规键 [i]) .计次循环尾 () .否则 调试输出 (RX784状态码到文本 (状态码)) .如果结束 设备.关闭 () 返回 (0)
py
import rx784

device = rx784.Device()

device.open('COM1')

status, keyboard_state = device.get_keyboard_state()
if status == rx784.Status.SUCCESS:
    print('control_left      |', keyboard_state.modifier_keys.control_left )
    print('shift_left        |', keyboard_state.modifier_keys.shift_left)
    print('alt_left          |', keyboard_state.modifier_keys.alt_left)
    print('os_left           |', keyboard_state.modifier_keys.os_left)
    print('control_right     |', keyboard_state.modifier_keys.control_right)
    print('shift_right       |', keyboard_state.modifier_keys.shift_right)
    print('alt_right         |', keyboard_state.modifier_keys.alt_right)
    print('os_right          |', keyboard_state.modifier_keys.os_right)
    for i, key in enumerate(keyboard_state.regular_keys):
        print('regular_keys[', i, '] |', key)
else:
    print(status)

device.close()
import rx784

device = rx784.Device()

device.open('COM1')

status, keyboard_state = device.get_keyboard_state()
if status == rx784.Status.SUCCESS:
    print('control_left      |', keyboard_state.modifier_keys.control_left )
    print('shift_left        |', keyboard_state.modifier_keys.shift_left)
    print('alt_left          |', keyboard_state.modifier_keys.alt_left)
    print('os_left           |', keyboard_state.modifier_keys.os_left)
    print('control_right     |', keyboard_state.modifier_keys.control_right)
    print('shift_right       |', keyboard_state.modifier_keys.shift_right)
    print('alt_right         |', keyboard_state.modifier_keys.alt_right)
    print('os_right          |', keyboard_state.modifier_keys.os_right)
    for i, key in enumerate(keyboard_state.regular_keys):
        print('regular_keys[', i, '] |', key)
else:
    print(status)

device.close()