translate mode, mac --> win, debug 2
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
7dfcc401e5
commit
b2d13647be
@ -39,7 +39,7 @@ fn mouse_event(flags: u32, data: u32, dx: i32, dy: i32) -> DWORD {
|
|||||||
unsafe { SendInput(1, &mut input as LPINPUT, size_of::<INPUT>() as c_int) }
|
unsafe { SendInput(1, &mut input as LPINPUT, size_of::<INPUT>() as c_int) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn keybd_event(flags: u32, vk: u16, scan: u16) -> DWORD {
|
fn keybd_event(mut flags: u32, vk: u16, scan: u16) -> DWORD {
|
||||||
let mut scan = scan;
|
let mut scan = scan;
|
||||||
unsafe {
|
unsafe {
|
||||||
// https://github.com/rustdesk/rustdesk/issues/366
|
// https://github.com/rustdesk/rustdesk/issues/366
|
||||||
@ -52,35 +52,33 @@ fn keybd_event(flags: u32, vk: u16, scan: u16) -> DWORD {
|
|||||||
scan = MapVirtualKeyExW(vk as _, 0, LAYOUT) as _;
|
scan = MapVirtualKeyExW(vk as _, 0, LAYOUT) as _;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let mut input: INPUT = unsafe { std::mem::MaybeUninit::zeroed().assume_init() };
|
|
||||||
input.type_ = INPUT_KEYBOARD;
|
if flags & KEYEVENTF_UNICODE == 0 {
|
||||||
|
if scan >> 8 == 0xE0 || scan >> 8 == 0xE1 {
|
||||||
|
flags |= winapi::um::winuser::KEYEVENTF_EXTENDEDKEY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut union: INPUT_u = unsafe { std::mem::zeroed() };
|
||||||
unsafe {
|
unsafe {
|
||||||
let dst_ptr = (&mut input.u as *mut _) as *mut u8;
|
*union.ki_mut() = KEYBDINPUT {
|
||||||
let flags = match vk as _ {
|
|
||||||
winapi::um::winuser::VK_HOME |
|
|
||||||
winapi::um::winuser::VK_UP |
|
|
||||||
winapi::um::winuser::VK_PRIOR |
|
|
||||||
winapi::um::winuser::VK_LEFT |
|
|
||||||
winapi::um::winuser::VK_RIGHT |
|
|
||||||
winapi::um::winuser::VK_END |
|
|
||||||
winapi::um::winuser::VK_DOWN |
|
|
||||||
winapi::um::winuser::VK_NEXT |
|
|
||||||
winapi::um::winuser::VK_INSERT |
|
|
||||||
winapi::um::winuser::VK_DELETE => flags | winapi::um::winuser::KEYEVENTF_EXTENDEDKEY,
|
|
||||||
_ => flags,
|
|
||||||
};
|
|
||||||
|
|
||||||
let k = KEYBDINPUT {
|
|
||||||
wVk: vk,
|
wVk: vk,
|
||||||
wScan: scan,
|
wScan: scan,
|
||||||
dwFlags: flags,
|
dwFlags: flags,
|
||||||
time: 0,
|
time: 0,
|
||||||
dwExtraInfo: ENIGO_INPUT_EXTRA_VALUE,
|
dwExtraInfo: ENIGO_INPUT_EXTRA_VALUE,
|
||||||
};
|
};
|
||||||
let src_ptr = (&k as *const _) as *const u8;
|
|
||||||
std::ptr::copy_nonoverlapping(src_ptr, dst_ptr, size_of::<KEYBDINPUT>());
|
|
||||||
}
|
}
|
||||||
unsafe { SendInput(1, &mut input as LPINPUT, size_of::<INPUT>() as c_int) }
|
let mut inputs = [INPUT {
|
||||||
|
type_: INPUT_KEYBOARD,
|
||||||
|
u: union,
|
||||||
|
}; 1];
|
||||||
|
unsafe {
|
||||||
|
SendInput(
|
||||||
|
inputs.len() as UINT,
|
||||||
|
inputs.as_mut_ptr(),
|
||||||
|
size_of::<INPUT>() as c_int,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_error() -> String {
|
fn get_error() -> String {
|
||||||
|
@ -806,8 +806,8 @@ fn is_hot_key_modifiers_down() -> bool {
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
pub fn translate_key_code(event: &Event, mut key_event: KeyEvent) -> Option<KeyEvent> {
|
pub fn translate_key_code(peer: &str, event: &Event, key_event: KeyEvent) -> Option<KeyEvent> {
|
||||||
let mut key_event = map_keyboard_mode(event, key_event)?;
|
let mut key_event = map_keyboard_mode(peer, event, key_event)?;
|
||||||
key_event.set_chr((key_event.chr() & 0x0000FFFF) | ((event.code as u32) << 16));
|
key_event.set_chr((key_event.chr() & 0x0000FFFF) | ((event.code as u32) << 16));
|
||||||
Some(key_event)
|
Some(key_event)
|
||||||
}
|
}
|
||||||
|
@ -1084,8 +1084,6 @@ fn legacy_keyboard_mode(evt: &KeyEvent) {
|
|||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
fn translate_process_code(code: u32, down: bool) {
|
fn translate_process_code(code: u32, down: bool) {
|
||||||
crate::platform::windows::try_change_desktop();
|
crate::platform::windows::try_change_desktop();
|
||||||
let vk_code =
|
|
||||||
|
|
||||||
match code >> 16 {
|
match code >> 16 {
|
||||||
0 => sim_rdev_rawkey_position(code, down),
|
0 => sim_rdev_rawkey_position(code, down),
|
||||||
vk_code => sim_rdev_rawkey_virtual(vk_code, down),
|
vk_code => sim_rdev_rawkey_virtual(vk_code, down),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user