我正在try 开发一个使用sdl2库的程序.到目前为止,它工作得很好,但当我运行该程序时,我会看到两个窗口——sdl2窗口和console窗口.
如何隐藏或不创建控制台窗口?也许有WinMain
个?
我正在try 开发一个使用sdl2库的程序.到目前为止,它工作得很好,但当我运行该程序时,我会看到两个窗口——sdl2窗口和console窗口.
如何隐藏或不创建控制台窗口?也许有WinMain
个?
Rust 1.18引入了Windows子系统属性.用以下方法关闭控制台:
#![windows_subsystem = "windows"]
当Rust二进制文件与GCC工具链链接时,要启动一个程序而不生成命令行窗口,我们需要pass the -mwindows
option to the linker.
Cargo has a cargo rustc
mode可用于向rustc
传递额外旗帜.在这之前,there was no known way to pass an option to the compiler with Cargo.
当我们创建了一个编译或隐藏一个窗口时,我们可以在创建该窗口后隐藏该窗口:
fn hide_console_window() {
use std::ptr;
use winapi::um::wincon::GetConsoleWindow;
use winapi::um::winuser::{ShowWindow, SW_HIDE};
let window = unsafe {GetConsoleWindow()};
// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow
if window != ptr::null_mut() {
unsafe {
ShowWindow(window, SW_HIDE);
}
}
}
我们需要下列Cargo .toml编译示例:
[dependencies]
winapi = {version = "0.3", features = ["wincon", "winuser"]}
当我们从现有控制台或IDE运行程序时:
fn hide_console_window() {
unsafe { winapi::um::wincon::FreeConsole() };
}
如果我们从批处理文件启动应用程序,第二种方法不起作用,因为批处理仍然拥有控制台,并防止其消失.