Commit 1f590045 authored by Vincent Vanackere's avatar Vincent Vanackere Committed by Alex Brainman

syscall : add a field to ProcAttr so that StartProcess can hide the executed application on windows

The SW_HIDE parameter looks like the only way for a windows GUI application to execute a CLI subcommand without having a shell windows appearing.

R=brainman, golang-dev, bradfitzgo, rsc1
CC=golang-dev
https://golang.org/cl/4439055
parent 22a2f42c
...@@ -218,9 +218,10 @@ func joinExeDirAndFName(dir, p string) (name string, err int) { ...@@ -218,9 +218,10 @@ func joinExeDirAndFName(dir, p string) (name string, err int) {
} }
type ProcAttr struct { type ProcAttr struct {
Dir string Dir string
Env []string Env []string
Files []int Files []int
HideWindow bool
} }
var zeroAttributes ProcAttr var zeroAttributes ProcAttr
...@@ -282,6 +283,10 @@ func StartProcess(argv0 string, argv []string, attr *ProcAttr) (pid, handle int, ...@@ -282,6 +283,10 @@ func StartProcess(argv0 string, argv []string, attr *ProcAttr) (pid, handle int,
si := new(StartupInfo) si := new(StartupInfo)
si.Cb = uint32(unsafe.Sizeof(*si)) si.Cb = uint32(unsafe.Sizeof(*si))
si.Flags = STARTF_USESTDHANDLES si.Flags = STARTF_USESTDHANDLES
if attr.HideWindow {
si.Flags |= STARTF_USESHOWWINDOW
si.ShowWindow = SW_HIDE
}
si.StdInput = fd[0] si.StdInput = fd[0]
si.StdOutput = fd[1] si.StdOutput = fd[1]
si.StdErr = fd[2] si.StdErr = fd[2]
......
...@@ -77,6 +77,7 @@ const ( ...@@ -77,6 +77,7 @@ const (
HANDLE_FLAG_INHERIT = 0x00000001 HANDLE_FLAG_INHERIT = 0x00000001
STARTF_USESTDHANDLES = 0x00000100 STARTF_USESTDHANDLES = 0x00000100
STARTF_USESHOWWINDOW = 0x00000001
DUPLICATE_CLOSE_SOURCE = 0x00000001 DUPLICATE_CLOSE_SOURCE = 0x00000001
DUPLICATE_SAME_ACCESS = 0x00000002 DUPLICATE_SAME_ACCESS = 0x00000002
...@@ -240,6 +241,25 @@ type ByHandleFileInformation struct { ...@@ -240,6 +241,25 @@ type ByHandleFileInformation struct {
FileIndexLow uint32 FileIndexLow uint32
} }
// ShowWindow constants
const (
// winuser.h
SW_HIDE = 0
SW_NORMAL = 1
SW_SHOWNORMAL = 1
SW_SHOWMINIMIZED = 2
SW_SHOWMAXIMIZED = 3
SW_MAXIMIZE = 3
SW_SHOWNOACTIVATE = 4
SW_SHOW = 5
SW_MINIMIZE = 6
SW_SHOWMINNOACTIVE = 7
SW_SHOWNA = 8
SW_RESTORE = 9
SW_SHOWDEFAULT = 10
SW_FORCEMINIMIZE = 11
)
type StartupInfo struct { type StartupInfo struct {
Cb uint32 Cb uint32
_ *uint16 _ *uint16
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment