github.com/tonto/cli@v0.0.0-20180104210444-aec958fa47db/run_windows.go (about)

     1  // +build windows
     2  
     3  package main
     4  
     5  import (
     6  	"io"
     7  	"os"
     8  	"syscall"
     9  	"unsafe"
    10  )
    11  
    12  func stdin() io.Reader {
    13  	if isTerminal(int(os.Stdin.Fd())) {
    14  		return nil
    15  	}
    16  	return os.Stdin
    17  }
    18  
    19  func isTerminal(fd int) bool {
    20  	kernel32 := syscall.NewLazyDLL("kernel32.dll")
    21  	procGetConsoleMode := kernel32.NewProc("GetConsoleMode")
    22  	var st uint32
    23  	r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0)
    24  	return r != 0 && e == 0
    25  }