我正在试着开发一个使用sdl 2库的程序,到目前为止它运行得很好,但是当我运行这个程序时,我得到了两个窗口-sdl 2窗口和控制台窗口。如何隐藏或不创建控制台窗口?也许有某种WinMain?
WinMain
hi3rlvi21#
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被引入。当我们无法影响编译或链接到所需的效果时,一种解决方法是在创建窗口后隐藏窗口:
-mwindows
cargo rustc
rustc
fn hide_console_window() { use std::ptr; use winapi::um::wincon::GetConsoleWindow; use winapi::um::winuser::{ShowWindow, SW_HIDE}; let window = unsafe {GetConsoleWindow()}; // https://learn.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() }; }
型如果我们从批处理文件启动应用程序,第二种方法就不起作用了,因为批处理仍然拥有控制台,并防止它消失。
6yoyoihd2#
很快,https://github.com/rust-lang/rust/pull/37501将着陆,这是RFC 1665的实现,正确答案将是
字符串在你的箱子里
chhqkbe13#
添加到Roman Quick的答案中,如果您正在使用MSVC工具链,则需要传递MSVC链接器参数。
cargo rustc --release -- -Clink-args="/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup"
字符串
l7wslrjt4#
过了一段时间,我找到了一个完美的答案!Cargo现在有了非常有用的子命令-rustc。完整的build命令是这样的:
cargo rustc -- -Clink-args="-Wl,--subsystem,windows"
字符串现在我们可以使用常规的cargo build构建调试版本,当我们需要进行最终构建时,我们可以使用以下命令:
cargo build
cargo rustc --release -- -Clink-args="-Wl,--subsystem,windows"
型
hyrbngr75#
如何隐藏或不创建控制台窗口?您可以使用创建标志来指示没有窗口。
winapi = {version = "0.3.9", features = ["winbase"]}
个字符Is it possible to use the standard library to spawn a process without showing the console window in Windows?
5条答案
按热度按时间hi3rlvi21#
Rust 1.18引入了一个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被引入。当我们无法影响编译或链接到所需的效果时,一种解决方法是在创建窗口后隐藏窗口:
型
我们需要在Cargo.toml中包含以下内容来编译这个示例:
型
当我们从现有的控制台或IDE运行程序时:
型
如果我们从批处理文件启动应用程序,第二种方法就不起作用了,因为批处理仍然拥有控制台,并防止它消失。
6yoyoihd2#
很快,https://github.com/rust-lang/rust/pull/37501将着陆,这是RFC 1665的实现,正确答案将是
字符串
在你的箱子里
chhqkbe13#
添加到Roman Quick的答案中,如果您正在使用MSVC工具链,则需要传递MSVC链接器参数。
字符串
l7wslrjt4#
过了一段时间,我找到了一个完美的答案!Cargo现在有了非常有用的子命令-
rustc
。完整的build命令是这样的:
字符串
现在我们可以使用常规的
cargo build
构建调试版本,当我们需要进行最终构建时,我们可以使用以下命令:型
hyrbngr75#
如何隐藏或不创建控制台窗口?
您可以使用创建标志来指示没有窗口。
个字符
Is it possible to use the standard library to spawn a process without showing the console window in Windows?