Skip to content

Commit

Permalink
Exposing STARTUPINFOW.wShowWindow in CommandExt (show_window function…
Browse files Browse the repository at this point in the history
…) to control how a new process should display its window (normal, minimized, maximized, etc)
  • Loading branch information
Andres Olivares committed Jul 10, 2024
1 parent c5f1c76 commit fe62f6f
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
12 changes: 12 additions & 0 deletions std/src/os/windows/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,13 @@ pub trait CommandExt: Sealed {
#[stable(feature = "windows_process_extensions", since = "1.16.0")]
fn creation_flags(&mut self, flags: u32) -> &mut process::Command;

/// Sets the field [wShowWindow][1] of [STARTUPINFO][2] that is passed to `CreateProcess`.
///
/// [1]: https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow
/// [2]: https://learn.microsoft.com/es-es/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfow
#[unstable(feature = "windows_process_extensions_show_window", issue = "none")]
fn show_window(&mut self, cmd_show: u16) -> &mut process::Command;

/// Forces all arguments to be wrapped in quote (`"`) characters.
///
/// This is useful for passing arguments to [MSYS2/Cygwin][1] based
Expand Down Expand Up @@ -370,6 +377,11 @@ impl CommandExt for process::Command {
self
}

fn show_window(&mut self, cmd_show: u16) -> &mut process::Command {
self.as_inner_mut().show_window(Some(cmd_show));
self
}

fn force_quotes(&mut self, enabled: bool) -> &mut process::Command {
self.as_inner_mut().force_quotes(enabled);
self
Expand Down
10 changes: 10 additions & 0 deletions std/src/sys/pal/windows/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ pub struct Command {
env: CommandEnv,
cwd: Option<OsString>,
flags: u32,
show_window: Option<u16>,
detach: bool, // not currently exposed in std::process
stdin: Option<Stdio>,
stdout: Option<Stdio>,
Expand Down Expand Up @@ -194,6 +195,7 @@ impl Command {
env: Default::default(),
cwd: None,
flags: 0,
show_window: None,
detach: false,
stdin: None,
stdout: None,
Expand Down Expand Up @@ -224,6 +226,9 @@ impl Command {
pub fn creation_flags(&mut self, flags: u32) {
self.flags = flags;
}
pub fn show_window(&mut self, cmd_show: Option<u16>) {
self.show_window = cmd_show;
}

pub fn force_quotes(&mut self, enabled: bool) {
self.force_quotes_enabled = enabled;
Expand Down Expand Up @@ -337,6 +342,11 @@ impl Command {
si.hStdError = stderr.as_raw_handle();
}

if let Some(cmd_show) = self.show_window {
si.dwFlags |= c::STARTF_USESHOWWINDOW;
si.wShowWindow = cmd_show;
}

let si_ptr: *mut c::STARTUPINFOW;

let mut proc_thread_attribute_list;
Expand Down

0 comments on commit fe62f6f

Please sign in to comment.