先试试 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 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 表示隐藏控制台

View File

@ -18,4 +18,7 @@ fn main() {
// 输出相关信息 // 输出相关信息
println!("call {}", VERSION); println!("call {}", VERSION);
println!("config: {}", config); 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));
}