mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-04-10 01:01:29 +03:00
update windows
This commit is contained in:
@@ -9,7 +9,7 @@ use std::thread;
|
|||||||
use tokio::sync::mpsc::error::TrySendError;
|
use tokio::sync::mpsc::error::TrySendError;
|
||||||
use tokio::sync::mpsc::Sender;
|
use tokio::sync::mpsc::Sender;
|
||||||
use windows::core::{w, PCWSTR};
|
use windows::core::{w, PCWSTR};
|
||||||
use windows::Win32::Foundation::{FALSE, HINSTANCE, HWND, LPARAM, LRESULT, RECT, WPARAM};
|
use windows::Win32::Foundation::{FALSE, HWND, LPARAM, LRESULT, RECT, WPARAM};
|
||||||
use windows::Win32::Graphics::Gdi::{
|
use windows::Win32::Graphics::Gdi::{
|
||||||
EnumDisplayDevicesW, EnumDisplaySettingsW, DEVMODEW, DISPLAY_DEVICEW,
|
EnumDisplayDevicesW, EnumDisplaySettingsW, DEVMODEW, DISPLAY_DEVICEW,
|
||||||
DISPLAY_DEVICE_ATTACHED_TO_DESKTOP, ENUM_CURRENT_SETTINGS,
|
DISPLAY_DEVICE_ATTACHED_TO_DESKTOP, ENUM_CURRENT_SETTINGS,
|
||||||
@@ -19,12 +19,12 @@ use windows::Win32::System::Threading::GetCurrentThreadId;
|
|||||||
|
|
||||||
use windows::Win32::UI::WindowsAndMessaging::{
|
use windows::Win32::UI::WindowsAndMessaging::{
|
||||||
CallNextHookEx, CreateWindowExW, DispatchMessageW, GetMessageW, PostThreadMessageW,
|
CallNextHookEx, CreateWindowExW, DispatchMessageW, GetMessageW, PostThreadMessageW,
|
||||||
RegisterClassW, SetWindowsHookExW, TranslateMessage, EDD_GET_DEVICE_INTERFACE_NAME, HHOOK,
|
RegisterClassW, SetWindowsHookExW, TranslateMessage, EDD_GET_DEVICE_INTERFACE_NAME, HOOKPROC,
|
||||||
HMENU, HOOKPROC, KBDLLHOOKSTRUCT, LLKHF_EXTENDED, MSG, MSLLHOOKSTRUCT, WH_KEYBOARD_LL,
|
KBDLLHOOKSTRUCT, LLKHF_EXTENDED, MSG, MSLLHOOKSTRUCT, WH_KEYBOARD_LL, WH_MOUSE_LL,
|
||||||
WH_MOUSE_LL, WINDOW_STYLE, WM_DISPLAYCHANGE, WM_KEYDOWN, WM_KEYUP, WM_LBUTTONDOWN,
|
WINDOW_STYLE, WM_DISPLAYCHANGE, WM_KEYDOWN, WM_KEYUP, WM_LBUTTONDOWN, WM_LBUTTONUP,
|
||||||
WM_LBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MOUSEHWHEEL, WM_MOUSEMOVE, WM_MOUSEWHEEL,
|
WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MOUSEHWHEEL, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN,
|
||||||
WM_RBUTTONDOWN, WM_RBUTTONUP, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_USER, WM_XBUTTONDOWN,
|
WM_RBUTTONUP, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_USER, WM_XBUTTONDOWN, WM_XBUTTONUP, WNDCLASSW,
|
||||||
WM_XBUTTONUP, WNDCLASSW, WNDPROC,
|
WNDPROC,
|
||||||
};
|
};
|
||||||
|
|
||||||
use input_event::{
|
use input_event::{
|
||||||
@@ -128,7 +128,7 @@ thread_local! {
|
|||||||
fn get_msg() -> Option<MSG> {
|
fn get_msg() -> Option<MSG> {
|
||||||
unsafe {
|
unsafe {
|
||||||
let mut msg = std::mem::zeroed();
|
let mut msg = std::mem::zeroed();
|
||||||
let ret = GetMessageW(addr_of_mut!(msg), HWND::default(), 0, 0);
|
let ret = GetMessageW(addr_of_mut!(msg), None, 0, 0);
|
||||||
match ret.0 {
|
match ret.0 {
|
||||||
0 => None,
|
0 => None,
|
||||||
x if x > 0 => Some(msg),
|
x if x > 0 => Some(msg),
|
||||||
@@ -176,14 +176,15 @@ fn start_routine(
|
|||||||
|
|
||||||
/* register hooks */
|
/* register hooks */
|
||||||
unsafe {
|
unsafe {
|
||||||
let _ = SetWindowsHookExW(WH_MOUSE_LL, mouse_proc, HINSTANCE::default(), 0).unwrap();
|
let _ = SetWindowsHookExW(WH_MOUSE_LL, mouse_proc, None, 0).unwrap();
|
||||||
let _ = SetWindowsHookExW(WH_KEYBOARD_LL, kybrd_proc, HINSTANCE::default(), 0).unwrap();
|
let _ = SetWindowsHookExW(WH_KEYBOARD_LL, kybrd_proc, None, 0).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
let instance = unsafe { GetModuleHandleW(None).unwrap() };
|
let instance = unsafe { GetModuleHandleW(None).unwrap() };
|
||||||
|
let instance = instance.into();
|
||||||
let window_class: WNDCLASSW = WNDCLASSW {
|
let window_class: WNDCLASSW = WNDCLASSW {
|
||||||
lpfnWndProc: window_proc,
|
lpfnWndProc: window_proc,
|
||||||
hInstance: instance.into(),
|
hInstance: instance,
|
||||||
lpszClassName: w!("lan-mouse-message-window-class"),
|
lpszClassName: w!("lan-mouse-message-window-class"),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
@@ -213,9 +214,9 @@ fn start_routine(
|
|||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
HWND::default(),
|
None,
|
||||||
HMENU::default(),
|
None,
|
||||||
instance,
|
Some(instance),
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
.expect("CreateWindowExW");
|
.expect("CreateWindowExW");
|
||||||
@@ -312,7 +313,7 @@ unsafe extern "system" fn mouse_proc(ncode: i32, wparam: WPARAM, lparam: LPARAM)
|
|||||||
|
|
||||||
/* no client was active */
|
/* no client was active */
|
||||||
if !active {
|
if !active {
|
||||||
return CallNextHookEx(HHOOK::default(), ncode, wparam, lparam);
|
return CallNextHookEx(None, ncode, wparam, lparam);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get active client if any */
|
/* get active client if any */
|
||||||
@@ -337,7 +338,7 @@ unsafe extern "system" fn mouse_proc(ncode: i32, wparam: WPARAM, lparam: LPARAM)
|
|||||||
unsafe extern "system" fn kybrd_proc(ncode: i32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
|
unsafe extern "system" fn kybrd_proc(ncode: i32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
|
||||||
/* get active client if any */
|
/* get active client if any */
|
||||||
let Some(client) = ACTIVE_CLIENT.get() else {
|
let Some(client) = ACTIVE_CLIENT.get() else {
|
||||||
return CallNextHookEx(HHOOK::default(), ncode, wparam, lparam);
|
return CallNextHookEx(None, ncode, wparam, lparam);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* convert to key event */
|
/* convert to key event */
|
||||||
@@ -388,7 +389,10 @@ fn enumerate_displays(display_rects: &mut Vec<RECT>) {
|
|||||||
if ret == FALSE {
|
if ret == FALSE {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP != 0 {
|
if device
|
||||||
|
.StateFlags
|
||||||
|
.contains(DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
|
||||||
|
{
|
||||||
devices.push(device.DeviceName);
|
devices.push(device.DeviceName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user