Skip to content

usinput/hid-detector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hid-detector

Windows HID device detection library for Rust.

Detect and identify HID devices (keyboards, mice, gamepads) by their VID/PID using the Windows Raw Input API.

Features

  • Simple API for device detection
  • Retrieves Windows friendly names
  • Extracts VID/PID from device paths
  • Configurable detection thresholds
  • Real-time detection callbacks
  • Support for keyboards, mice, and gamepads

Usage

Add to your Cargo.toml:

[dependencies]
hid-detector = "0.1"

Basic Example

use hid_detector::{DetectionConfig, DeviceDetector};
use std::time::Duration;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = DetectionConfig {
        keyboard_threshold: 2,
        mouse_threshold: 100,
        duration: Duration::from_secs(10),
    };

    let detector = DeviceDetector::new(config)?;
    let devices = detector.detect()?;

    for device in devices {
        println!("{}: {} ({})",
            device.name(),
            device.vid_pid(),
            device.device_type()
        );
    }

    Ok(())
}

With Real-Time Callback

let devices = detector.detect_with_callback(|device| {
    println!("Detected: {} - {}", device.name(), device.vid_pid());
})?;

How It Works

  1. Keyboards: Detected after 2 key presses (default)
  2. Mice: Detected after 100 movement/click events (default)
  3. Gamepads: Detected after 100 input events (default)

The library listens to Raw Input events for a configured duration and confirms devices once they cross the input threshold.

API

DetectionConfig

pub struct DetectionConfig {
    pub keyboard_threshold: u64,  // Default: 2
    pub mouse_threshold: u64,      // Default: 100
    pub duration: Duration,        // Default: 10 seconds
}

Device

impl Device {
    pub fn name(&self) -> String;
    pub fn vid_pid(&self) -> String;
    pub fn path(&self) -> &str;
    pub fn device_type(&self) -> DeviceType;
    pub fn vid(&self) -> Option<u16>;
    pub fn pid(&self) -> Option<u16>;
    pub fn input_count(&self) -> u64;
}

DeviceType

pub enum DeviceType {
    Mouse,
    Keyboard,
    Gamepad,
    Unknown,
}

Running the Example

cargo run --example detect

Platform Support

  • Windows only (uses Win32 Raw Input API)

License

MIT

About

Windows HID and input device detection via Raw Input API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages