#mouse #events #listen #click #simulate

bin+lib mouce

A library that aims to help simulating and listening mouse actions across different platforms

12 releases

0.2.41 Nov 10, 2022
0.2.4 Aug 24, 2022
0.2.3 Jul 19, 2022
0.2.2 Jun 18, 2022
0.1.5 Apr 19, 2022

#73 in GUI

Download history 2/week @ 2022-10-13 7/week @ 2022-10-20 1/week @ 2022-10-27 2/week @ 2022-11-03 23/week @ 2022-11-10 16/week @ 2022-11-17 9/week @ 2022-11-24 10/week @ 2022-12-01 14/week @ 2022-12-08 17/week @ 2022-12-15 10/week @ 2022-12-22 6/week @ 2022-12-29 9/week @ 2023-01-05 10/week @ 2023-01-12 19/week @ 2023-01-19 20/week @ 2023-01-26

59 downloads per month
Used in 2 crates

MIT license

64KB
1.5K SLoC

mouce

Mouce is a library written in Rust that aims to help simulating and listening mouse actions across different platforms.

Supported platforms

  • Windows
    • Tested on Windows 10
    • Uses User32 system library
  • MacOS
    • Tested on a MacBook Pro (Retina, 13-inch, Mid 2014) with Big Sur installed on it
    • Uses CoreGraphics and CoreFoundation frameworks
  • Unix-like systems
    • X11
      • Tested on i3wm Arch Linux
      • Uses X11 and XTest libraries
    • Others (partially supported)
      • For other systems, the library defaults to using uinput
      • While using uinput there are some limitations for the library
        • get_position function is not implemented as uinput does not provide such a feature
        • The rest of the actions work and tested on KDE Wayland and sway

Library interface

/// Move the mouse to the given `x`, `y` coordinates
fn move_to(&self, x: usize, y: usize) -> Result<(), Error>;
/// Move the mouse relative to the current position
fn move_relative(&self, x_offset: i32, y_offset: i32) -> Result<(), Error>;
/// Get the current position of the mouse
fn get_position(&self) -> Result<(i32, i32), Error>;
/// Press down the given mouse button
fn press_button(&self, button: &MouseButton) -> Result<(), Error>;
/// Release the given mouse button
fn release_button(&self, button: &MouseButton) -> Result<(), Error>;
/// Click the given mouse button
fn click_button(&self, button: &MouseButton) -> Result<(), Error>;
/// Scroll the mouse wheel towards to the given direction
fn scroll_wheel(&self, direction: &ScrollDirection) -> Result<(), Error>;
/// Attach a callback function to mouse events
fn hook(&mut self, callback: Box<dyn Fn(&MouseEvent) + Send>) -> Result<CallbackId, Error>;
/// Remove the callback function with the given `CallbackId`
fn unhook(&mut self, callback_id: CallbackId) -> Result<(), Error>;
/// Remove all callback functions
fn unhook_all(&mut self) -> Result<(), Error>;

Example

This example program moves the mouse from left to right;

use std::thread;
use std::time::Duration;

use mouce::Mouse;

fn main() {
    let mouse_manager = Mouse::new();

    let mut x = 0;
    while x < 1920 {
        mouse_manager.move_to(x, 540);
        x += 1;
        thread::sleep(Duration::from_millis(2));
    }
}

To see more examples, you can look at the documentation by running;

cargo doc --open

CLI binary

mouce comes with an example CLI program that uses mouce library functions. You can install the binary with;

cargo install mouce --features="cli"

and see mouce --help for further details.

Dependencies

~0–475KB