1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//! Text input via Win32 SendInput — replaces PowerShell SendKeys.
//!
//! This module types arbitrary Unicode text into the active Windows desktop
//! target by calling the Win32 [`SendInput`] API directly. It is used by the
//! `computer_use` tool when an agent requests text entry through the native
//! desktop automation backend.
//!
//! Unlike `SendKeys`-style automation, this path sends UTF-16 scan units with
//! [`KEYEVENTF_UNICODE`]. That means characters such as `+`, `^`, `%`, braces,
//! and other SendKeys metacharacters are delivered as literal text rather than
//! being interpreted as shortcut syntax.
//!
//! # Preconditions
//!
//! The intended destination window must already have keyboard focus. This
//! module does not choose or focus a window; callers should use the platform
//! window-management actions before typing when focus is uncertain.
//!
//! # Side effects
//!
//! Functions in this module synthesize keyboard input at the OS level. The
//! generated text is delivered to whichever control currently receives keyboard
//! input.
use UI*;
/// Type a string by sending each character as a Unicode key event.
///
/// Uses `KEYEVENTF_UNICODE` so special chars like `+`, `^`, `%` need no
/// escaping (unlike PowerShell's `SendKeys`). Handles non-BMP characters
/// by emitting both UTF-16 surrogates.
///
/// # Arguments
///
/// * `text` - The exact Unicode string to type into the currently focused
/// desktop control.
///
/// # Returns
///
/// Returns `Ok(())` after every UTF-16 code unit in `text` has been sent as a
/// key-down/key-up pair.
///
/// # Errors
///
/// Returns an error if any `SendInput` call fails.
///
/// # Side effects
///
/// Sends synthetic keyboard input to the active Windows input target.
/// Sends one UTF-16 code unit as a Unicode key press and release.
///
/// This helper is responsible for turning a single UTF-16 unit into the pair of
/// Win32 input events expected by [`SendInput`]. Non-BMP characters are handled
/// by the caller as two separate surrogate units.
///
/// # Arguments
///
/// * `ch` - UTF-16 code unit to send through `KEYEVENTF_UNICODE`.
///
/// # Returns
///
/// Returns `Ok(())` when Win32 reports that both the key-down and key-up events
/// were accepted.
///
/// # Errors
///
/// Returns an error if [`SendInput`] reports that fewer than two events were
/// inserted into the input stream.
///
/// # Side effects
///
/// Injects a key-down/key-up pair into the Windows input queue.
/// Builds a Win32 keyboard input event for one Unicode UTF-16 code unit.
///
/// The returned [`INPUT`] uses `INPUT_KEYBOARD`, sets `wVk` to zero as required
/// for Unicode scan-code input, stores the UTF-16 code unit in `wScan`, and
/// always includes [`KEYEVENTF_UNICODE`]. When `up` is true the event also
/// includes [`KEYEVENTF_KEYUP`].
///
/// # Arguments
///
/// * `ch` - UTF-16 code unit to place in the `wScan` field.
/// * `up` - Whether to create the key-release event (`true`) or key-press event
/// (`false`).
///
/// # Returns
///
/// A fully populated Win32 [`INPUT`] structure suitable for [`SendInput`].
///
/// # Safety
///
/// This function is marked unsafe because it constructs Win32 union fields in
/// [`INPUT_0`]. Callers must ensure the `r#type` field and active union variant
/// remain consistent, as this function does by setting `r#type` to
/// [`INPUT_KEYBOARD`] and initializing the `ki` keyboard field.
unsafe