use crate::error::Error;
use winapi::um::{
winuser::{
LASTINPUTINFO,
PLASTINPUTINFO,
GetLastInputInfo
},
sysinfoapi::GetTickCount
};
pub fn get_idle_time() -> Result<u64, Error> {
let now = unsafe { GetTickCount() };
let mut last_input_info = LASTINPUTINFO {
cbSize: 8, dwTime: 0
};
let p_last_input_info: PLASTINPUTINFO = &mut last_input_info as *mut LASTINPUTINFO;
let ok = unsafe { GetLastInputInfo(p_last_input_info) } != 0;
match ok {
true => Ok((now - last_input_info.dwTime) / 1000),
false => Err(Error::new("GetLastInputInfo failed"))
}
}