logitech-cve 1.5.4

A Rust library for interacting with Logitech virtual driver.
Documentation
use core::time::Duration;
use logitech_cve::{
    device::Device,
    keyboard::{Key, Keyboard},
};
use std::thread;
use windows_sys::Win32::UI::{
    Input::KeyboardAndMouse::{
        VK_1, VK_A, VK_B, VK_C, VK_D, VK_E, VK_F, VK_H, VK_L, VK_LSHIFT, VK_O, VK_OEM_COMMA, VK_R, VK_SPACE, VK_W,
    },
    WindowsAndMessaging::WH_KEYBOARD_LL,
};

mod common;

#[test]
fn press_and_release() {
    let device = Device::try_new().unwrap();
    let keyboard = Keyboard::new(&device);

    thread::spawn(|| common::start(WH_KEYBOARD_LL));
    thread::sleep(Duration::from_millis(100));
    keyboard.press(Key::A);
    keyboard.release();
    thread::sleep(Duration::from_millis(100));
    assert_eq!(vec![format!("{VK_A} DOWN"), format!("{VK_A} UP")], common::stop());
}

#[test]
fn multi_press() {
    let device = Device::try_new().unwrap();
    let keyboard = Keyboard::new(&device);

    thread::spawn(|| common::start(WH_KEYBOARD_LL));
    thread::sleep(Duration::from_millis(100));
    keyboard.multi_press(Key::A, Key::B, Key::C, Key::D, Key::E, Key::F);
    thread::sleep(Duration::from_millis(100));
    assert_eq!(
        vec![
            format!("{VK_A} DOWN"),
            format!("{VK_B} DOWN"),
            format!("{VK_C} DOWN"),
            format!("{VK_D} DOWN"),
            format!("{VK_E} DOWN"),
            format!("{VK_F} DOWN"),
        ],
        common::stop()
    );
    keyboard.release();
}

#[test]
fn type_string() {
    let device = Device::try_new().unwrap();
    let keyboard = Keyboard::new(&device);

    thread::spawn(|| common::start(WH_KEYBOARD_LL));
    thread::sleep(Duration::from_millis(100));
    keyboard.type_string("Hello, World!", 50).expect("Should be OK");
    thread::sleep(Duration::from_millis(100));
    assert_eq!(
        vec![
            format!("{VK_LSHIFT} DOWN"),
            format!("{VK_H} DOWN"),
            format!("{VK_LSHIFT} UP"),
            format!("{VK_H} UP"),
            format!("{VK_E} DOWN"),
            format!("{VK_E} UP"),
            format!("{VK_L} DOWN"),
            format!("{VK_L} UP"),
            format!("{VK_L} DOWN"),
            format!("{VK_L} UP"),
            format!("{VK_O} DOWN"),
            format!("{VK_O} UP"),
            format!("{VK_OEM_COMMA} DOWN"),
            format!("{VK_OEM_COMMA} UP"),
            format!("{VK_SPACE} DOWN"),
            format!("{VK_SPACE} UP"),
            format!("{VK_LSHIFT} DOWN"),
            format!("{VK_W} DOWN"),
            format!("{VK_LSHIFT} UP"),
            format!("{VK_W} UP"),
            format!("{VK_O} DOWN"),
            format!("{VK_O} UP"),
            format!("{VK_R} DOWN"),
            format!("{VK_R} UP"),
            format!("{VK_L} DOWN"),
            format!("{VK_L} UP"),
            format!("{VK_D} DOWN"),
            format!("{VK_D} UP"),
            format!("{VK_LSHIFT} DOWN"),
            format!("{VK_1} DOWN"),
            format!("{VK_LSHIFT} UP"),
            format!("{VK_1} UP")
        ],
        common::stop()
    );
    keyboard.release();
}