Rust 1.18 представил атрибут подсистемы Windows. Выключите консоль с:
#![windows_subsystem = "windows"]
ржавчину двоичные файлы связаны с 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.
В этих случаях один обходной путь, чтобы скрыть окно после того, как оно было создано:
extern crate winapi;
extern crate user32;
extern crate kernel32;
use std::ptr;
fn hide_console_window() {
let window = unsafe {kernel32::GetConsoleWindow()};
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx
if window != ptr::null_mut() {
unsafe {
user32::ShowWindow(window, winapi::SW_HIDE);
}
}
}
Вам потребуется следующее в вашем Cargo.toml скомпилировать:
[dependencies]
winapi = "*"
user32-sys = "*"
kernel32-sys = "*"
Чтобы запустить его с существующей консоли или IDE, возможно:
fn hide_console_window() {
unsafe { kernel32::FreeConsole() };
}
Этот второй метод не работает для r me, потому что я запускаю приложение из пакетного файла. Понимаете, пакет все еще владеет консолью, поэтому он остается на экране.
Благодарим вас за такой полезный ответ. Я буду ждать несколько часов для других ответов и принять их, если ничего лучше не появится :) – Revertron
Несомненно, я буду рад узнать о решении теста, даже если это займет три года. – ArtemGr
@ArtemGr ['GetConsoleWindow'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms683175%28v=vs.85%29.aspx) возвращает дескриптор окна консоли. –