103 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
use std::io::{self, Read};
 | 
						|
#[cfg(windows)]
 | 
						|
use virtual_display;
 | 
						|
 | 
						|
#[cfg(windows)]
 | 
						|
fn prompt_input() -> u8 {
 | 
						|
    println!("Press  key          execute:");
 | 
						|
    println!("       1. 'q'       1. quit");
 | 
						|
    println!("       2. 'i'       2. install or update driver");
 | 
						|
    println!("       3. 'u'       3. uninstall driver");
 | 
						|
    println!("       4. 'c'       4. create device");
 | 
						|
    println!("       5. 'd'       5. destroy device");
 | 
						|
    println!("       6. '1'       6. plug in monitor 0,1,2");
 | 
						|
    println!("       7. '4'       7. plug out monitor 0,1,2");
 | 
						|
 | 
						|
    io::stdin()
 | 
						|
        .bytes()
 | 
						|
        .next()
 | 
						|
        .and_then(|result| result.ok())
 | 
						|
        .unwrap_or(0)
 | 
						|
}
 | 
						|
 | 
						|
#[cfg(windows)]
 | 
						|
fn plug_in(monitor_index: u32) {
 | 
						|
    println!("Plug in monitor begin");
 | 
						|
    if let Err(e) = virtual_display::plug_in_monitor(monitor_index as _) {
 | 
						|
        println!("{}", e);
 | 
						|
    } else {
 | 
						|
        println!("Plug in monitor done");
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#[cfg(windows)]
 | 
						|
fn plug_out(monitor_index: u32) {
 | 
						|
    println!("Plug out monitor begin");
 | 
						|
    if let Err(e) = virtual_display::plug_out_monitor(monitor_index as _) {
 | 
						|
        println!("{}", e);
 | 
						|
    } else {
 | 
						|
        println!("Plug out monitor done");
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#[cfg(windows)]
 | 
						|
fn main() {
 | 
						|
    loop {
 | 
						|
        let chr = prompt_input();
 | 
						|
        match chr as char {
 | 
						|
            'q' => break,
 | 
						|
            'i' => {
 | 
						|
                println!("Install or update driver begin");
 | 
						|
                let mut reboot_required = false;
 | 
						|
                if let Err(e) = virtual_display::install_update_driver(&mut reboot_required) {
 | 
						|
                    println!("{}", e);
 | 
						|
                } else {
 | 
						|
                    println!(
 | 
						|
                        "Install or update driver done, reboot is {} required",
 | 
						|
                        if reboot_required { "" } else { "not" }
 | 
						|
                    );
 | 
						|
                }
 | 
						|
            }
 | 
						|
            'u' => {
 | 
						|
                println!("Uninstall driver begin");
 | 
						|
                let mut reboot_required = false;
 | 
						|
                if let Err(e) = virtual_display::uninstall_driver(&mut reboot_required) {
 | 
						|
                    println!("{}", e);
 | 
						|
                } else {
 | 
						|
                    println!(
 | 
						|
                        "Uninstall driver done, reboot is {} required",
 | 
						|
                        if reboot_required { "" } else { "not" }
 | 
						|
                    );
 | 
						|
                }
 | 
						|
            }
 | 
						|
            'c' => {
 | 
						|
                println!("Create device begin");
 | 
						|
                if virtual_display::is_device_created() {
 | 
						|
                    println!("Device created before");
 | 
						|
                    continue;
 | 
						|
                }
 | 
						|
                if let Err(e) = virtual_display::create_device() {
 | 
						|
                    println!("{}", e);
 | 
						|
                } else {
 | 
						|
                    println!("Create device done");
 | 
						|
                }
 | 
						|
            }
 | 
						|
            'd' => {
 | 
						|
                println!("Close device begin");
 | 
						|
                virtual_display::close_device();
 | 
						|
                println!("Close device done");
 | 
						|
            }
 | 
						|
            '1' => plug_in(0),
 | 
						|
            '2' => plug_in(1),
 | 
						|
            '3' => plug_in(2),
 | 
						|
            '4' => plug_out(0),
 | 
						|
            '5' => plug_out(1),
 | 
						|
            '6' => plug_out(2),
 | 
						|
            _ => {}
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#[cfg(not(windows))]
 | 
						|
fn main() {}
 |