rupper 0.1.0

A mod of driver-level keyboard simulation for Windows 7 and higher.
Documentation
pub mod keyboard {
    #[repr(u8)]
    #[derive(Debug, Clone, Copy)]
    pub enum Modifier {
        None = 0x00,
        LCtrl = 0x01,
        LShift = 0x02,
        LAlt = 0x04,
        LMeta = 0x08,
        RCtrl = 0x10,
        RShift = 0x20,
        RAlt = 0x40,
        RMeta = 0x80,
    }

    #[repr(u8)]
    #[derive(Debug, Clone, Copy)]
    pub enum Keycode {
        None = 0x00,
        A = 0x04,
        B = 0x05,
        C = 0x06,
        D = 0x07,
        E = 0x08,
        F = 0x09,
        G = 0x0a,
        H = 0x0b,
        I = 0x0c,
        J = 0x0d,
        K = 0x0e,
        L = 0x0f,
        M = 0x10,
        N = 0x11,
        O = 0x12,
        P = 0x13,
        Q = 0x14,
        R = 0x15,
        S = 0x16,
        T = 0x17,
        U = 0x18,
        V = 0x19,
        W = 0x1a,
        X = 0x1b,
        Y = 0x1c,
        Z = 0x1d,
        Num1 = 0x1e,
        Num2 = 0x1f,
        Num3 = 0x20,
        Num4 = 0x21,
        Num5 = 0x22,
        Num6 = 0x23,
        Num7 = 0x24,
        Num8 = 0x25,
        Num9 = 0x26,
        Num0 = 0x27,
        Enter = 0x28,
        Esc = 0x29,
        Backspace = 0x2a,
        Tab = 0x2b,
        Space = 0x2c,
        Minus = 0x2d,
        Equal = 0x2e,
        LeftBrace = 0x2f,
        RightBrace = 0x30,
        Backslash = 0x31,
        HashTilde = 0x32,
        Semicolon = 0x33,
        Apostrophe = 0x34,
        Grave = 0x35,
        Comma = 0x36,
        Dot = 0x37,
        Slash = 0x38,
        CapsLock = 0x39,
        F1 = 0x3a,
        F2 = 0x3b,
        F3 = 0x3c,
        F4 = 0x3d,
        F5 = 0x3e,
        F6 = 0x3f,
        F7 = 0x40,
        F8 = 0x41,
        F9 = 0x42,
        F10 = 0x43,
        F11 = 0x44,
        F12 = 0x45,
        SysRq = 0x46,
        ScrollLock = 0x47,
        Pause = 0x48,
        Insert = 0x49,
        Home = 0x4a,
        PageUp = 0x4b,
        Delete = 0x4c,
        End = 0x4d,
        PageDown = 0x4e,
        Right = 0x4f,
        Left = 0x50,
        Down = 0x51,
        Up = 0x52,
        NumLock = 0x53,
        KPDivide = 0x54,
        KPMultiply = 0x55,
        KPMinus = 0x56,
        KPPlus = 0x57,
        KPEnter = 0x58,
        KP1 = 0x59,
        KP2 = 0x5a,
        KP3 = 0x5b,
        KP4 = 0x5c,
        KP5 = 0x5d,
        KP6 = 0x5e,
        KP7 = 0x5f,
        KP8 = 0x60,
        KP9 = 0x61,
        KP0 = 0x62,
        KPDot = 0x63,
        Key102nd = 0x64,
        Compose = 0x65,
        LeftCtrl = 0xe0,
        LeftShift = 0xe1,
        LeftAlt = 0xe2,
        LeftMeta = 0xe3,
        RightCtrl = 0xe4,
        RightShift = 0xe5,
        RightAlt = 0xe6,
        RightMeta = 0xe7,
    }
    #[link(name = "cper", kind = "dylib")]
    extern "C" {
        fn KeyDown(keycodes: *mut u8, modifier: u8);
        fn KeyUp();
    }
    pub fn press_key(keycodes: Vec<Keycode>, modifier: Modifier) {
        let keycodes: Vec<u8> = keycodes.into_iter().map(|k| k as u8).collect();
        let mut mask: [u8; 6] = [0; 6];
        mask[..keycodes.len()].copy_from_slice(&keycodes);
        unsafe {
            KeyDown(mask.as_mut_ptr(), modifier as u8);
        }
    }
    pub fn release_key() {
        unsafe {
            KeyUp()
        }
    }
}