Skip to content

Commit 6a3718f

Browse files
committed
[*] add some windows platform codes
1 parent 70e0af0 commit 6a3718f

File tree

9 files changed

+392
-77
lines changed

9 files changed

+392
-77
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/screen-capture-windows/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ crossbeam.workspace = true
2020
spin_sleep.workspace = true
2121
display-info.workspace = true
2222
screen-capture.workspace = true
23+
derive_setters.workspace = true
2324
winapi = { workspace = true, features = [
2425
"d3d11",
2526
"d3dcommon",

lib/screen-capture-windows/examples/backend_demo.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
use image::{ImageBuffer, Rgba};
2-
use screen_capture_windows::DXGIManager;
2+
use screen_capture_windows::{DXGIManager, available_screens};
33
use std::time::Instant;
44

55
fn main() {
6-
let mut manager = DXGIManager::new(300).unwrap();
6+
let screen_infos = available_screens().unwrap();
7+
if screen_infos.is_empty() {
8+
panic!("available screen no found");
9+
}
10+
11+
let mut manager = DXGIManager::new(screen_infos[0].name.to_string()).unwrap();
712

813
println!("Starting screen capture benchmark...");
914
println!();
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
use screen_capture_windows::{available_screens, capture_mean_time};
2+
3+
fn main() -> Result<(), Box<dyn std::error::Error>> {
4+
let screen_infos = available_screens()?;
5+
if let Ok(avg_time) = capture_mean_time(&screen_infos[0].name, 10) {
6+
println!("Average capture time: {:.2?}", avg_time);
7+
} else {
8+
println!("Failed to measure capture time");
9+
}
10+
11+
Ok(())
12+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
use screen_capture_windows::DXGIManager;
2+
3+
fn main() {
4+
// List all available screens
5+
match DXGIManager::list_available_screens() {
6+
Ok(screens) => {
7+
println!("Available screens:");
8+
for (i, screen) in screens.iter().enumerate() {
9+
println!(" {}: {}", i, screen);
10+
}
11+
12+
if !screens.is_empty() {
13+
// Try to capture the first screen
14+
let screen_name = screens[0].split(" (").next().unwrap_or(&screens[0]);
15+
println!("\nTrying to capture screen: {}", screen_name);
16+
17+
match DXGIManager::new(screen_name.to_string()) {
18+
Ok(mut manager) => {
19+
println!(
20+
"Successfully initialized DXGIManager for screen: {}",
21+
screen_name
22+
);
23+
24+
// Get screen geometry (this returns a tuple directly, not a Result)
25+
let (width, height) = manager.geometry();
26+
println!("Screen geometry: {}x{}", width, height);
27+
28+
// Try to capture a frame
29+
match manager.capture_frame_rgba() {
30+
Ok((_buffer, (width, height))) => {
31+
println!(
32+
"Successfully captured frame: {}x{} ({} bytes)",
33+
width,
34+
height,
35+
_buffer.len()
36+
);
37+
}
38+
Err(e) => {
39+
println!("Failed to capture frame: {:?}", e);
40+
}
41+
}
42+
}
43+
Err(e) => {
44+
println!("Failed to create DXGIManager: {:?}", e);
45+
}
46+
}
47+
}
48+
}
49+
Err(e) => {
50+
println!("Failed to list screens: {:?}", e);
51+
}
52+
}
53+
}
54+

0 commit comments

Comments
 (0)