1extern "system" {
2 pub fn SendInput(cInputs: u32, pInputs: *mut Input, cbSize: i32) -> u32;
3 pub fn GetSystemMetrics(nIndex: i32) -> i32;
4}
5
6pub struct MouseInput {
7 pub dx: i32,
8 pub dy: i32,
9 pub mouse_data: u32,
10 pub flags: u32,
11 pub time: u32,
12 pub extra_info: u64,
13}
14
15pub struct Input {
16 pub input_type: u32,
17 pub input_data: MouseInput,
18}
19
20pub fn send_input(dx: i32, dy: i32, mouse_data: u32, flags: u32) {
21 let mut input = Input{
22 input_type: 0,
23 input_data: MouseInput {
24 dx: dx,
25 dy: dy,
26 mouse_data: mouse_data,
27 flags: flags,
28 time: 0,
29 extra_info: 0
30 }
31 };
32 unsafe {SendInput(1, &mut input, std::mem::size_of::<Input>() as i32);}
33}
34
35pub fn move_mouse(mut x: i32, mut y: i32, abs: bool) {
36 let mut flags = 0x0001;
37 if abs == true {
38 x = x*65335/unsafe{GetSystemMetrics(78)};
39 y = y*65335/unsafe{GetSystemMetrics(79)};
40 flags = flags | 0x8000;
41 }
42 send_input(x, y, 0, flags);
43}
44
45pub struct MouseButton {
46 pub e_down: u32,
47 pub e_up: u32,
48}
49
50impl MouseButton {
51 pub fn down(&self) {send_input(0, 0, 0, self.e_down)}
52 pub fn up(&self) {send_input(0, 0, 0, self.e_up)}
53}
54
55pub const LEFT: MouseButton = MouseButton{e_down: 0x0002, e_up: 0x0004};
56pub const RIGHT: MouseButton = MouseButton{e_down: 0x0008, e_up: 0x0010};
57pub const MIDDLE: MouseButton = MouseButton{e_down: 0x0020, e_up: 0x0040};
58
59pub fn wheel(movement: u32) {send_input(0, 0, movement, 0x0800)}