8个版本

0.2.5 2021年7月10日
0.2.4 2021年5月3日
0.2.3 2021年4月2日
0.2.2 2021年3月29日
0.1.1 2021年1月4日

#68 in Windows API

Download history 127/week @ 2024-04-20 118/week @ 2024-04-27 108/week @ 2024-05-04 145/week @ 2024-05-11 130/week @ 2024-05-18 126/week @ 2024-05-25 124/week @ 2024-06-01 59/week @ 2024-06-08 115/week @ 2024-06-15 125/week @ 2024-06-22 61/week @ 2024-06-29 50/week @ 2024-07-06 274/week @ 2024-07-13 198/week @ 2024-07-20 145/week @ 2024-07-27 110/week @ 2024-08-03

732 每月下载量
4 crates 中使用

MIT 许可证

70KB
952

Documentation Crates.io

winput 是 Windows 输入系统的高级接口。

目标

这个crate旨在尽可能底层和直接,以便用作其他更通用crate的后端。为此,“minimal”功能禁用了Windows输入系统大部分不是真正组成部分的东西(例如,主要为方便而存在的Keylike等)。

功能

  • minimal:此功能禁用Keylike结构以及一些快捷函数。此功能是为希望使用winput提供的直接API的人而设计的。
  • message_loop:此功能启用message_loop模块,该模块提供了一种从Windows消息系统中全局检索键盘和鼠标事件的方法。

还需要做什么?

winput目前不支持除了鼠标和键盘之外的任何设备。我还没有深入研究它们的工作原理,所以如果你知道任何信息,请随时提交问题或拉取请求!

示例

Keylike结构允许您在可以用于键的对象上合成按键。

use winput::{Vk, Button};

// Synthesize keystrokes from a Virtual-Key Code
winput::press(Vk::Shift);    // press the shift key
winput::send(Vk::A);         // press then release the A key
winput::release(Vk::Shift);  // release the shift key

// Synthesize keystrokes from characters
winput::send('F');
winput::send('O');
winput::send('O');

// Synthesize keystrokes from mouse buttons
winput::send(Button::Left);

// You can synthesize keystrokes for the characters of a string
winput::send_str("Hello, world!");

可以使用Mouse结构来操作鼠标。

use winput::Mouse;

// Retrieve the position of the mouse.
let (x, y) = Mouse::position();

// Set the mouse position
//  ... in screen coordinates
Mouse::set_position(10, 10);
//  ... in normalized absolute coordinates
Mouse::move_absolute(0.5, 0.5);
//  ... relatively to the current cursor's position
Mouse::move_relative(100, 50);

// Rotate the mouse wheel (vertically)
Mouse::scroll(1.5);
//  ... or horizontally
Mouse::scrollh(-1.5);

对于更复杂的输入模式,可以使用Input结构。

use winput::{Input, Vk, Action, MouseMotion};

// There is multiple ways to create an `Input`:
let inputs = [
    // ... from a character
    Input::from_char('a', Action::Press).unwrap(),
    // ... from a Virtual-Key Code
    Input::from_vk(Vk::A, Action::Release),
    // ... from a mouse motion
    Input::from_motion(MouseMotion::Relative { x: 100, y: 100 }),

    // additional constructors are available
];

let number_of_inputs_inserted = winput::send_inputs(&inputs);

assert_eq!(number_of_inputs_inserted, 3);

使用默认启用的 message_loop 功能,可以检索键盘按键和鼠标输入。

use winput::{Vk, Action};
use winput::message_loop;

let receiver = message_loop::start().unwrap();

loop {
    match receiver.next_event() {
        message_loop::Event::Keyboard {
            vk,
            action: Action::Press,
            ..
        } => {
            if vk == Vk::Escape {
                break;
            } else {
                println!("{:?} was pressed!", vk);
            }
        },
        _ => (),
    }
}

依赖项

~0.7–395KB