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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
//! # Ergonomic Windows
//!
//! Ergonomic wrappers around Windows APIs for Rust.
//!
//! This crate provides safe, idiomatic Rust interfaces to common Windows functionality:
//!
//! - **Error Handling**: Rich error types with Windows error code support
//! - **Handle Management**: RAII wrappers for Windows handles
//! - **String Utilities**: Easy conversion between Rust and Windows strings
//! - **Process Management**: Create, manage, and query Windows processes
//! - **File System**: Windows-specific file operations
//! - **Registry**: Read and write Windows Registry keys
//! - **Windows**: Create windows and handle messages
//! - **Threading**: Threads, mutexes, events, semaphores
//! - **Memory**: Virtual memory, heaps, memory info
//! - **Console**: Console I/O, colors, cursor control
//! - **Environment**: Environment variables
//! - **Pipes**: Anonymous and named pipes for IPC
//! - **Time**: High-resolution timers, system time
//! - **Modules**: Dynamic library (DLL) loading
//! - **System Info**: OS version, hardware info
//! - **Security**: Tokens, privileges, elevation
//! - **Controls**: Win32 common controls (buttons, edit, listbox, etc.)
//! - **Direct2D**: Hardware-accelerated 2D graphics and text
//! - **WebView2**: Chromium-based web browser control (requires feature)
//! - **XAML**: WinRT XAML UI types and XAML Islands support
//!
//! ## Quick Start
//!
//! ```no_run
//! use ergonomic_windows::process::Command;
//! use ergonomic_windows::registry::{Key, RootKey, Access};
//!
//! // Spawn a process
//! let process = Command::new("notepad.exe")
//! .arg("file.txt")
//! .spawn()?;
//!
//! // Read from the registry
//! let key = Key::open(
//! RootKey::CURRENT_USER,
//! r"Software\Microsoft\Windows\CurrentVersion",
//! Access::READ,
//! )?;
//! let value = key.get_value("ProgramFilesDir")?;
//!
//! # Ok::<(), ergonomic_windows::error::Error>(())
//! ```
//!
//! ## Feature Highlights
//!
//! ### RAII Handle Management
//!
//! Windows handles are automatically closed when dropped:
//!
//! ```ignore
//! use ergonomic_windows::handle::OwnedHandle;
//!
//! {
//! let handle = OwnedHandle::new(some_raw_handle)?;
//! // Use the handle...
//! } // Handle is automatically closed here
//! # Ok::<(), ergonomic_windows::error::Error>(())
//! ```
//!
//! ### Easy String Conversion
//!
//! Convert between Rust and Windows strings effortlessly:
//!
//! ```
//! use ergonomic_windows::string::{to_wide, from_wide, WideString};
//!
//! // To wide string
//! let wide = to_wide("Hello, Windows!");
//!
//! // From wide string
//! let back = from_wide(&wide).unwrap();
//!
//! // For Windows APIs
//! let ws = WideString::new("Hello");
//! // use ws.as_pcwstr() with Windows APIs
//! ```
//!
//! ### Process Management
//!
//! Create and manage processes with a fluent API:
//!
//! ```no_run
//! use ergonomic_windows::process::Command;
//!
//! // Run a command and wait for completion
//! let exit_code = Command::new("cmd.exe")
//! .args(["/c", "echo", "Hello"])
//! .no_window()
//! .run()?;
//!
//! # Ok::<(), ergonomic_windows::error::Error>(())
//! ```
//!
//! ### Registry Access
//!
//! Read and write registry values with type safety:
//!
//! ```no_run
//! use ergonomic_windows::registry::{Key, RootKey, Access, Value};
//!
//! // Write a value
//! let key = Key::create(RootKey::CURRENT_USER, r"Software\MyApp", Access::ALL)?;
//! key.set_value("Setting", &Value::dword(42))?;
//!
//! // Read it back
//! let value = key.get_value("Setting")?;
//! assert_eq!(value.as_dword(), Some(42));
//!
//! # Ok::<(), ergonomic_windows::error::Error>(())
//! ```
//!
//! ### Threading and Synchronization
//!
//! ```no_run
//! use ergonomic_windows::thread::{Thread, Mutex, Event};
//! use std::sync::Arc;
//!
//! // Spawn a thread
//! let thread = Thread::spawn(|| {
//! println!("Hello from thread!");
//! 42
//! })?;
//! let exit_code = thread.join()?;
//!
//! // Use a mutex
//! let mutex = Mutex::new(false)?;
//! {
//! let _guard = mutex.lock()?;
//! // Protected region
//! }
//!
//! // Use an event for signaling
//! let event = Event::new_manual(false)?;
//! event.set()?; // Signal
//! event.wait()?; // Wait for signal
//!
//! # Ok::<(), ergonomic_windows::error::Error>(())
//! ```
//!
//! ### System Information
//!
//! ```no_run
//! use ergonomic_windows::sysinfo::{system_summary, OsVersion};
//! use ergonomic_windows::security::is_elevated;
//!
//! let summary = system_summary()?;
//! println!("OS: {}", summary.os_version);
//! println!("CPUs: {}", summary.processor.processor_count);
//! println!("Memory: {} MB", summary.memory.total_physical / 1024 / 1024);
//! println!("Elevated: {}", is_elevated()?);
//!
//! # Ok::<(), ergonomic_windows::error::Error>(())
//! ```
// Core modules
// System modules
// UI modules
/// Prelude module for convenient imports.