mirror of https://github.com/stashapp/stash.git
89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
//go:build windows
|
|
// +build windows
|
|
|
|
package desktop
|
|
|
|
import (
|
|
"os/exec"
|
|
"syscall"
|
|
"unsafe"
|
|
|
|
"github.com/go-toast/toast"
|
|
"github.com/stashapp/stash/pkg/logger"
|
|
"golang.org/x/sys/windows/svc"
|
|
)
|
|
|
|
var (
|
|
kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
|
user32 = syscall.NewLazyDLL("user32.dll")
|
|
)
|
|
|
|
func isService() bool {
|
|
result, err := svc.IsWindowsService()
|
|
if err != nil {
|
|
logger.Errorf("Encountered error checking if running as Windows service: %s", err.Error())
|
|
return false
|
|
}
|
|
return result
|
|
}
|
|
|
|
// Detect if windows golang executable file is running via double click or from cmd/shell terminator
|
|
// https://stackoverflow.com/questions/8610489/distinguish-if-program-runs-by-clicking-on-the-icon-typing-its-name-in-the-cons?rq=1
|
|
// https://github.com/shirou/w32/blob/master/kernel32.go
|
|
// https://github.com/kbinani/win/blob/master/kernel32.go#L3268
|
|
// win.GetConsoleProcessList(new(uint32), win.DWORD(2))
|
|
// from https://gist.github.com/yougg/213250cc04a52e2b853590b06f49d865
|
|
func isDoubleClickLaunched() bool {
|
|
lp := kernel32.NewProc("GetConsoleProcessList")
|
|
if lp != nil {
|
|
var pids [2]uint32
|
|
var maxCount uint32 = 2
|
|
ret, _, _ := lp.Call(uintptr(unsafe.Pointer(&pids)), uintptr(maxCount))
|
|
if ret > 1 {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func hideConsole() {
|
|
const SW_HIDE = 0
|
|
h := getConsoleWindow()
|
|
lp := user32.NewProc("ShowWindow")
|
|
|
|
// don't want to check for errors and can't prevent dogsled
|
|
_, _, _ = lp.Call(h, SW_HIDE) //nolint:dogsled
|
|
}
|
|
|
|
func getConsoleWindow() uintptr {
|
|
lp := kernel32.NewProc("GetConsoleWindow")
|
|
ret, _, _ := lp.Call()
|
|
return ret
|
|
}
|
|
|
|
func isServerDockerized() bool {
|
|
return false
|
|
}
|
|
|
|
func sendNotification(notificationTitle string, notificationText string) {
|
|
notification := toast.Notification{
|
|
AppID: "Stash",
|
|
Title: notificationTitle,
|
|
Message: notificationText,
|
|
Icon: getIconPath(),
|
|
Actions: []toast.Action{{
|
|
Type: "protocol",
|
|
Label: "Open Stash",
|
|
Arguments: getServerURL(""),
|
|
}},
|
|
}
|
|
err := notification.Push()
|
|
if err != nil {
|
|
logger.Errorf("Error creating Windows notification: %s", err.Error())
|
|
}
|
|
}
|
|
|
|
func revealInFileManager(path string) {
|
|
exec.Command(`explorer`, `\select`, path)
|
|
}
|