Skip to content

发送相对鼠标状态

按照相对坐标系统,直接发送 USB HID 鼠标报告,并更改设备内部记录的鼠标状态。

语法

cpp
class RX784::Device {
    Status sendRelMouseState(
        const MouseState&     mouseState,
        const MouseStateMask& mouseStateMask
    );
};
class RX784::Device {
    Status sendRelMouseState(
        const MouseState&     mouseState,
        const MouseStateMask& mouseStateMask
    );
};
e
类名基类公开备注
RX784设备
方法名返回值类型公开备注
发送相对鼠标状态整数型
参数名类型参考可空数组备注
鼠标状态鼠标状态
鼠标状态掩码鼠标状态掩码
.版本 2 .程序集 RX784设备, , 公开 .子程序 发送相对鼠标状态, 整数型, 公开 .参数 鼠标状态, 鼠标状态 .参数 鼠标状态掩码, 鼠标状态掩码
py
class Device:
    def send_rel_mouse_state(self,
        mouse_state:      MouseState,
        mouse_state_mask: MouseStateMask
    ) -> Status: ...
class Device:
    def send_rel_mouse_state(self,
        mouse_state:      MouseState,
        mouse_state_mask: MouseStateMask
    ) -> Status: ...

参数

名称英文说明
键盘状态keyboard state要设置的状态。
键盘状态掩码keyboard state mask掩码值为真的字段才会被设置。

返回值

名称英文说明
状态码status成功返回

备注

一般先取得键盘状态,然后根据需要修改状态,将需要改变的字段的掩码设置为真,表示只改变这些字段,其他字段不变。

类型

cpp
struct MouseState {
    struct Buttons {
        uint8_t left   : 1;
        uint8_t right  : 1;
        uint8_t middle : 1;
    };
    struct Axes {
        int16_t x;
        int16_t y;
        int16_t w;
    };
    Buttons buttons;
    Axes axes;
};

union MouseStateMask {
    struct Buttons {
        uint8_t buttonLeft   : 1;
        uint8_t buttonRight  : 1;
        uint8_t buttonMiddle : 1;
    };
    struct Axes {
        uint8_t _ : 3;
        uint8_t x : 1;
        uint8_t y : 1;
        uint8_t w : 1;
    };
    Buttons buttons;
    Axes axes;
};
struct MouseState {
    struct Buttons {
        uint8_t left   : 1;
        uint8_t right  : 1;
        uint8_t middle : 1;
    };
    struct Axes {
        int16_t x;
        int16_t y;
        int16_t w;
    };
    Buttons buttons;
    Axes axes;
};

union MouseStateMask {
    struct Buttons {
        uint8_t buttonLeft   : 1;
        uint8_t buttonRight  : 1;
        uint8_t buttonMiddle : 1;
    };
    struct Axes {
        uint8_t _ : 3;
        uint8_t x : 1;
        uint8_t y : 1;
        uint8_t w : 1;
    };
    Buttons buttons;
    Axes axes;
};
e
数据类型名公开备注
鼠标状态
成员名类型传址数组备注
按键鼠标状态_按键
鼠标状态_轴
数据类型名公开备注
鼠标状态_按键
成员名类型传址数组备注
左键逻辑型
右键逻辑型
中键逻辑型
数据类型名公开备注
鼠标状态_轴
成员名类型传址数组备注
x短整数型
y短整数型
w短整数型
数据类型名公开备注
鼠标状态掩码
成员名类型传址数组备注
按键鼠标状态掩码_按键
鼠标状态掩码_轴
数据类型名公开备注
鼠标状态掩码_按键
成员名类型传址数组备注
左键逻辑型
右键逻辑型
中键逻辑型
数据类型名公开备注
鼠标状态掩码_轴
成员名类型传址数组备注
x逻辑型
y逻辑型
w逻辑型
.版本 2 .数据类型 鼠标状态, 公开 .成员 按键, 鼠标状态_按键 .成员 轴, 鼠标状态_轴 .数据类型 鼠标状态_按键, 公开 .成员 左键, 逻辑型 .成员 右键, 逻辑型 .成员 中键, 逻辑型 .数据类型 鼠标状态_轴, 公开 .成员 x, 短整数型 .成员 y, 短整数型 .成员 w, 短整数型 .数据类型 鼠标状态掩码, 公开 .成员 按键, 鼠标状态掩码_按键 .成员 轴, 鼠标状态掩码_轴 .数据类型 鼠标状态掩码_按键, 公开 .成员 左键, 逻辑型 .成员 右键, 逻辑型 .成员 中键, 逻辑型 .数据类型 鼠标状态掩码_轴, 公开 .成员 x, 逻辑型 .成员 y, 逻辑型 .成员 w, 逻辑型
py
@dataclass
class MouseState:
    @dataclass
    class Buttons:
        left:   bool
        right:  bool
        middle: bool

    @dataclass
    class Axes:
        x: int
        y: int
        w: int

    buttons: Buttons
    axes:    Axes


@dataclass
class MouseStateMask:
    @dataclass
    class Buttons:
        left:   bool = False
        right:  bool = False
        middle: bool = False

    @dataclass
    class Axes:
        x: bool = False
        y: bool = False
        w: bool = False

    buttons: Buttons = field(default_factory=Buttons)
    axes:    Axes    = field(default_factory=Axes)
@dataclass
class MouseState:
    @dataclass
    class Buttons:
        left:   bool
        right:  bool
        middle: bool

    @dataclass
    class Axes:
        x: int
        y: int
        w: int

    buttons: Buttons
    axes:    Axes


@dataclass
class MouseStateMask:
    @dataclass
    class Buttons:
        left:   bool = False
        right:  bool = False
        middle: bool = False

    @dataclass
    class Axes:
        x: bool = False
        y: bool = False
        w: bool = False

    buttons: Buttons = field(default_factory=Buttons)
    axes:    Axes    = field(default_factory=Axes)

示例

cpp
#include "rx784.hpp"

int main() {
    RX784::Device device;
    RX784::MouseState mouseState{};
    RX784::MouseStateMask mouseStateMask{};

    device.open("COM1");

    device.getRelMouseState(mouseState);

    mouseState.buttons.left = false;     // 不再按下左键
    mouseState.axes.x = 10;              // 向右移动 10 像素
    mouseStateMask.buttons.left = true;  // 影响左键
    mouseStateMask.axes.x = true;        // 影响 x 轴
    device.sendRelMouseState(mouseState, mouseStateMask);

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

int main() {
    RX784::Device device;
    RX784::MouseState mouseState{};
    RX784::MouseStateMask mouseStateMask{};

    device.open("COM1");

    device.getRelMouseState(mouseState);

    mouseState.buttons.left = false;     // 不再按下左键
    mouseState.axes.x = 10;              // 向右移动 10 像素
    mouseStateMask.buttons.left = true;  // 影响左键
    mouseStateMask.axes.x = true;        // 影响 x 轴
    device.sendRelMouseState(mouseState, mouseStateMask);

    device.close();
}
e
方法名返回值类型公开备注
_启动子程序整数型
变量名类型静态数组备注
设备RX784设备
鼠标状态鼠标状态
鼠标状态掩码鼠标状态掩码
设备.打开 (“COM1”)
设备.取相对鼠标状态 (鼠标状态)
鼠标状态.按键.左键 = 假 ' ''' 不再按下左键
鼠标状态.轴.x = 10 ' '''''''' 向右移动 10 像素
鼠标状态掩码.按键.左键 = 真 ' 影响左键
鼠标状态掩码.轴.x = 真 ' '''' 影响 x 轴
设备.发送相对鼠标状态 (鼠标状态, 鼠标状态掩码)
设备.关闭 ()
返回 (0)
.版本 2 .子程序 _启动子程序, 整数型 .局部变量 设备, RX784设备 .局部变量 鼠标状态, 鼠标状态 .局部变量 鼠标状态掩码, 鼠标状态掩码 设备.打开 (“COM1”) 设备.取相对鼠标状态 (鼠标状态) 鼠标状态.按键.左键 = 假 ' ''' 不再按下左键 鼠标状态.轴.x = 10 ' '''''''' 向右移动 10 像素 鼠标状态掩码.按键.左键 = 真 ' 影响左键 鼠标状态掩码.轴.x = 真 ' '''' 影响 x 轴 设备.发送相对鼠标状态 (鼠标状态, 鼠标状态掩码) 设备.关闭 () 返回 (0)
py
import rx784

device = rx784.Device()

device.open('COM1')

status, mouse_state = device.get_rel_mouse_state()
mouse_state_mask    = rx784.MouseStateMask()

mouse_state.buttons.left = False      # 不再按下左键
mouse_state.axes.x = 10               # 向右移动 10 像素
mouse_state_mask.buttons.left = True  # 影响左键
mouse_state_mask.axes.x = True        # 影响 x 轴
device.send_rel_mouse_state(mouse_state, mouse_state_mask)

device.close()
import rx784

device = rx784.Device()

device.open('COM1')

status, mouse_state = device.get_rel_mouse_state()
mouse_state_mask    = rx784.MouseStateMask()

mouse_state.buttons.left = False      # 不再按下左键
mouse_state.axes.x = 10               # 向右移动 10 像素
mouse_state_mask.buttons.left = True  # 影响左键
mouse_state_mask.axes.x = True        # 影响 x 轴
device.send_rel_mouse_state(mouse_state, mouse_state_mask)

device.close()