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
732 每月下载量
在 4 crates 中使用
70KB
952 行
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