wswg/platform_windows.go

40 lines
914 B
Go

package main
import (
"os/exec"
"syscall"
"unsafe"
)
func replaceFile(a, b string) error {
x, e := syscall.UTF16PtrFromString(a)
if e != nil {
return e
}
y, e := syscall.UTF16PtrFromString(b)
if e != nil {
return e
}
r, _, e := syscall.NewLazyDLL("kernel32.dll").NewProc("MoveFileExW").Call(uintptr(unsafe.Pointer(x)), uintptr(unsafe.Pointer(y)), 3)
if r == 0 {
return e
}
return nil
}
func background(c *exec.Cmd) {
c.SysProcAttr = &syscall.SysProcAttr{CreationFlags: 0x00000008 | 0x00000200}
}
func admin() bool {
r, _, _ := syscall.NewLazyDLL("shell32.dll").NewProc("IsUserAnAdmin").Call()
return r != 0
}
func enableTerminal() {
k := syscall.NewLazyDLL("kernel32.dll")
var mode uint32
handle := uintptr(syscall.Stdout)
r, _, _ := k.NewProc("GetConsoleMode").Call(handle, uintptr(unsafe.Pointer(&mode)))
if r != 0 {
k.NewProc("SetConsoleMode").Call(handle, uintptr(mode|4))
}
}