Cross-platform (Linux, Windows, macOS & BSD) package to simulate keyboard and mouse events
- π²οΈ Move mouse to absolute and relative positions
- π±οΈ Press and release mouse buttons
- ποΈ Enter text programmatically
- β¨οΈ Simulate key presses and releases
- ποΈ Support for multiple key modifiers
- π₯οΈ Desktop compatibility
To use Bixat Key Mouse in your Flutter project, add it to your pubspec.yaml
file:
flutter pub add bixat_key_mouse
Then run flutter pub get
to install the package.
Platform | Tested |
---|---|
Linux | No |
Windows | No |
macOS | Yes |
BSD | No |
To use Bixat Key Mouse in your Dart code, import the package:
import 'package:bixat_key_mouse/bixat_key_mouse.dart';
Here's a simple example demonstrating various functionalities:
import 'package:bixat_key_mouse/bixat_key_mouse.dart';
void main() {
// Move mouse to absolute position π±οΈ
BixatKeyMouse.moveMouse(x: x, y: y, coordinate: Coordinate.absolute);
// Move mouse relative to current position β‘οΈ
BixatKeyMouse.moveMouse(x: x, y: y, coordinate: Coordinate.relative);
// Click left mouse button π±οΈ
BixatKeyMouse.pressMouseButton(
button: MouseButton.left,
direction: Direction.click,
);
// Press left mouse button π±οΈ
BixatKeyMouse.pressMouseButton(
button: MouseButton.left,
direction: Direction.press,
);
// Release left mouse button π±οΈ
BixatKeyMouse.pressMouseButton(
button: MouseButton.left,
direction: Direction.release,
);
// Enter text ποΈ
final text = 'Hello, world!';
BixatKeyMouse.enterText(text);
// Simulate key press β¨οΈ
final key = UniversalKey.leftCommand;
BixatKeyMouse.simulateKeyPress(key);
// Release key β¨οΈ
final keyRelease = UniversalKey.capsLock;
BixatKeyMouse.simulateKeyPress(keyRelease, direction: Direction.release);
}
Move the mouse cursor to an absolute position on the screen. π
BixatKeyMouse.moveMouse(x: x, y: y, coordinate: Coordinate.absolute);
Move the mouse cursor relative to its current position. β‘οΈ
BixatKeyMouse.moveMouse(x: x, y: y, coordinate: Coordinate.relative);
Press the specified mouse button. π±οΈ
BixatKeyMouse.pressMouseButton(MouseButton.left); // Left mouse button
BixatKeyMouse.pressMouseButton(MouseButton.middle); // Middle mouse button
BixatKeyMouse.pressMouseButton(MouseButton.right); // Right mouse button
Release the specified mouse button. π±οΈ
BixatKeyMouse.pressMouseButton(
button: MouseButton.left,
direction: Direction.release,
);
Enter text programmatically. π
final text = 'Hello, world!';
BixatKeyMouse.enterText(text);
Simulate key press. β¨οΈ
final key = UniversalKey.leftCommand;
BixatKeyMouse.simulateKeyPress(key);
Simulate key release. β¨οΈ
final keyRelease = UniversalKey.capsLock;
BixatKeyMouse.simulateKeyPress(keyRelease);
You can combine mouse movements and key presses for complex interactions: π
BixatKeyMouse.moveMouseAbs(100, 100);
BixatKeyMouse.pressMouseButton(1);
// Perform actions...
BixatKeyMouse.releaseMouseButton(1);
The package throws exceptions when certain operations fail. It's recommended to handle these exceptions:
try {
BixatKeyMouse.moveMouseAbs(100, 100);
} catch (e) {
print('Error moving mouse: $e');
}
The Bixat Key Mouse package utilizes the Enigo crate for simulating keyboard and mouse events across different platforms. Enigo is a Rust library that provides a cross-platform abstraction for controlling keyboards and mice, making it a valuable underlying tool for this package. π
In addition, the Flutter Rust Bridge tool is used to facilitate seamless communication between Flutter and Rust, allowing efficient and safe function calls across language boundaries. This integration leverages Rust's performance and safety with Flutter's flexibility, further enhancing the package's capabilities. π
Contributions are welcome! Please feel free to submit a Pull Request. π€
This project is licensed under the MIT License - see the LICENSE file for details. π