diff --git a/src-tauri/src/mcp/server.rs b/src-tauri/src/mcp/server.rs index 4ece5f7..8f30231 100644 --- a/src-tauri/src/mcp/server.rs +++ b/src-tauri/src/mcp/server.rs @@ -504,9 +504,19 @@ async fn handle_rdp_click(AxumState(state): AxumState>, Json } async fn handle_rdp_type(AxumState(state): AxumState>, Json(req): Json) -> Json> { - // Type text by sending it via clipboard paste (most reliable for arbitrary text) + // Set clipboard then simulate Ctrl+V to paste (most reliable for arbitrary text) if let Err(e) = state.rdp.send_clipboard(&req.session_id, &req.text) { return err_response(e); } - ok_response(format!("typed {} chars", req.text.len())) + // Small delay for clipboard to propagate, then Ctrl+V + tokio::time::sleep(std::time::Duration::from_millis(50)).await; + // Ctrl down + let _ = state.rdp.send_key(&req.session_id, 0x001D, true); + // V down + let _ = state.rdp.send_key(&req.session_id, 0x002F, true); + // V up + let _ = state.rdp.send_key(&req.session_id, 0x002F, false); + // Ctrl up + let _ = state.rdp.send_key(&req.session_id, 0x001D, false); + ok_response(format!("typed {} chars via clipboard paste", req.text.len())) } async fn handle_rdp_clipboard(AxumState(state): AxumState>, Json(req): Json) -> Json> {