先试试 FreeConsole

This commit is contained in:
shenjack 2024-01-21 18:20:25 +08:00
parent 6a707f891b
commit b474aa7ef9
Signed by: shenjack
GPG Key ID: 7B1134A979775551
3 changed files with 36 additions and 11 deletions

View File

@ -18,7 +18,7 @@ pub struct Config {
pub chdir: Option<PathBuf>,
pub bin: PathBuf,
pub config: Option<String>,
pub bin_arg: String,
pub bin_arg: Vec<String>,
}
impl Display for Config {
@ -42,7 +42,6 @@ impl Config {
let mut bin: Option<String> = None;
let dir: Option<String> = None;
let mut config: Option<String> = None;
let mut bin_arg = "".to_string();
// -- 表示后面的参数都是可执行文件的参数
let args: Vec<String> = std::env::args().collect();
// 先检查有没有 --help
@ -52,14 +51,11 @@ impl Config {
}
let index = args.iter().position(|x| x == "--");
let bin_arg: Vec<String>;
if index.is_some() {
// 把后面的所有函数拼接一下, 作为可执行文件的参数
for i in index.unwrap() + 1..args.len() {
bin_arg.push_str(&args[i]);
if i != args.len() - 1 {
bin_arg.push(' ');
}
}
bin_arg = args[index.unwrap() + 1..].to_vec();
} else {
bin_arg = Vec::new();
}
// 先尝试获取指定的控制台参数
// --hide 表示隐藏控制台

View File

@ -18,4 +18,7 @@ fn main() {
// 输出相关信息
println!("call {}", VERSION);
println!("config: {}", config);
// 运行
#[cfg(windows)]
win::run(&config);
}

View File

@ -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));
}