diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 4c09bbe9f..66891784b 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -171,7 +171,17 @@ pub fn get_cursor() -> ResultType> { return Err(io::Error::last_os_error().into()); } if ci.flags & CURSOR_SHOWING == 0 { - Ok(None) + // Yowie IT MSP fork (2026-05-02): on Win 11 / Server 2022 with no + // physical mouse attached, Windows clears CURSOR_SHOWING and the + // upstream code returns None — so the connected viewer never + // receives any cursor data and headless servers show a black- + // screen-with-no-cursor in the RustDesk web client (upstream + // issue #672, unfixed 3+ years). Force-load the standard arrow + // so a valid cursor message is always sent on the wire. The + // viewer then renders the standard pointer, regardless of + // whether the endpoint has any HID hardware. Hash-pinned by + // IconInfo so it's effectively a one-shot per session. + Ok(Some(LoadCursorW(std::ptr::null_mut(), IDC_ARROW) as _)) } else { Ok(Some(ci.hCursor as _)) }