先试试 FreeConsole
This commit is contained in:
parent
6a707f891b
commit
b474aa7ef9
@ -18,7 +18,7 @@ pub struct Config {
|
|||||||
pub chdir: Option<PathBuf>,
|
pub chdir: Option<PathBuf>,
|
||||||
pub bin: PathBuf,
|
pub bin: PathBuf,
|
||||||
pub config: Option<String>,
|
pub config: Option<String>,
|
||||||
pub bin_arg: String,
|
pub bin_arg: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Display for Config {
|
impl Display for Config {
|
||||||
@ -42,7 +42,6 @@ impl Config {
|
|||||||
let mut bin: Option<String> = None;
|
let mut bin: Option<String> = None;
|
||||||
let dir: Option<String> = None;
|
let dir: Option<String> = None;
|
||||||
let mut config: Option<String> = None;
|
let mut config: Option<String> = None;
|
||||||
let mut bin_arg = "".to_string();
|
|
||||||
// -- 表示后面的参数都是可执行文件的参数
|
// -- 表示后面的参数都是可执行文件的参数
|
||||||
let args: Vec<String> = std::env::args().collect();
|
let args: Vec<String> = std::env::args().collect();
|
||||||
// 先检查有没有 --help
|
// 先检查有没有 --help
|
||||||
@ -52,14 +51,11 @@ impl Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let index = args.iter().position(|x| x == "--");
|
let index = args.iter().position(|x| x == "--");
|
||||||
|
let bin_arg: Vec<String>;
|
||||||
if index.is_some() {
|
if index.is_some() {
|
||||||
// 把后面的所有函数拼接一下, 作为可执行文件的参数
|
bin_arg = args[index.unwrap() + 1..].to_vec();
|
||||||
for i in index.unwrap() + 1..args.len() {
|
} else {
|
||||||
bin_arg.push_str(&args[i]);
|
bin_arg = Vec::new();
|
||||||
if i != args.len() - 1 {
|
|
||||||
bin_arg.push(' ');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 先尝试获取指定的控制台参数
|
// 先尝试获取指定的控制台参数
|
||||||
// --hide 表示隐藏控制台
|
// --hide 表示隐藏控制台
|
||||||
|
@ -18,4 +18,7 @@ fn main() {
|
|||||||
// 输出相关信息
|
// 输出相关信息
|
||||||
println!("call {}", VERSION);
|
println!("call {}", VERSION);
|
||||||
println!("config: {}", config);
|
println!("config: {}", config);
|
||||||
|
// 运行
|
||||||
|
#[cfg(windows)]
|
||||||
|
win::run(&config);
|
||||||
}
|
}
|
||||||
|
30
src/win.rs
30
src/win.rs
@ -1,3 +1,29 @@
|
|||||||
pub fn hide_window() {}
|
use crate::config::Config;
|
||||||
|
use winapi::um::wincon;
|
||||||
|
|
||||||
pub fn show_window() {}
|
pub fn call_bin(config: &Config) {
|
||||||
|
// 先切换工作目录
|
||||||
|
if let Some(chdir) = config.chdir.as_ref() {
|
||||||
|
std::env::set_current_dir(chdir).unwrap();
|
||||||
|
}
|
||||||
|
// 调用可执行文件
|
||||||
|
std::process::Command::new(&config.bin)
|
||||||
|
.args(&config.bin_arg)
|
||||||
|
.spawn()
|
||||||
|
.expect("执行失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn run(config: &Config) {
|
||||||
|
println!("先睡两秒为敬");
|
||||||
|
// 先睡两秒为敬
|
||||||
|
std::thread::sleep(std::time::Duration::from_secs(2));
|
||||||
|
println!("睡醒了");
|
||||||
|
// 尝试 FreeConsole 看看
|
||||||
|
unsafe {
|
||||||
|
wincon::FreeConsole();
|
||||||
|
}
|
||||||
|
println!("FreeConsole 了");
|
||||||
|
// 调用可执行文件
|
||||||
|
call_bin(&config);
|
||||||
|
std::thread::sleep(std::time::Duration::from_secs(2));
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user