fix: use two numbers to send current time

fix/data-structure
paring 2022-11-26 18:41:06 +09:00
parent f74f3894d7
commit 2d2215ce96
Signed by: pikokr
GPG Key ID: 2C097B03E9D823C4
1 changed files with 14 additions and 5 deletions

View File

@ -14,7 +14,8 @@ pub enum NativeEventType {
#[repr(C)] #[repr(C)]
pub struct NativeEvent { pub struct NativeEvent {
pub time: usize, pub time_sec: u64,
pub time_nsec: u32,
pub event_type: NativeEventType, pub event_type: NativeEventType,
pub vkey: u16, pub vkey: u16,
pub keycode: u16, pub keycode: u16,
@ -30,8 +31,12 @@ fn send_callback(ev: NativeEvent) {
} }
} }
fn get_time(time: SystemTime) -> usize { fn get_time(time: SystemTime) -> (u64, u32) {
time.duration_since(UNIX_EPOCH).unwrap().as_nanos() as usize let dur = time
.duration_since(UNIX_EPOCH)
.expect("Unable to calculate duration");
(dur.as_secs(), dur.subsec_nanos())
} }
#[no_mangle] #[no_mangle]
@ -41,18 +46,22 @@ pub extern "C" fn start_hook(callback: extern "C" fn(NativeEvent)) -> *const c_c
} }
if let Err(e) = skyhook::run(move |event| { if let Err(e) = skyhook::run(move |event| {
let (sec, nsec) = get_time(event.time);
let event = match event.data { let event = match event.data {
skyhook::types::EventData::KeyPress(label, key) => NativeEvent { skyhook::types::EventData::KeyPress(label, key) => NativeEvent {
time: get_time(event.time),
event_type: NativeEventType::KeyPressed, event_type: NativeEventType::KeyPressed,
vkey: label as u16, vkey: label as u16,
keycode: key, keycode: key,
time_sec: sec,
time_nsec: nsec,
}, },
skyhook::types::EventData::KeyRelease(label, key) => NativeEvent { skyhook::types::EventData::KeyRelease(label, key) => NativeEvent {
time: get_time(event.time),
event_type: NativeEventType::KeyReleased, event_type: NativeEventType::KeyReleased,
vkey: label as u16, vkey: label as u16,
keycode: key, keycode: key,
time_sec: sec,
time_nsec: nsec,
}, },
}; };
send_callback(event); send_callback(event);