From cf65351d4e7e6d9f9298932b0363592fedaf14c3 Mon Sep 17 00:00:00 2001 From: Justin Harms Date: Thu, 14 Dec 2023 20:25:51 -0600 Subject: [PATCH] added ability to rerun itself as admin should hopefully work and actually made window smaller --- admin/admin_linux.go | 13 +++++++++++++ admin/admin_windows.go | 41 +++++++++++++++++++++++++++++++++++++++++ main.go | 16 +++++++++++++--- 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 admin/admin_linux.go create mode 100644 admin/admin_windows.go diff --git a/admin/admin_linux.go b/admin/admin_linux.go new file mode 100644 index 0000000..30f105a --- /dev/null +++ b/admin/admin_linux.go @@ -0,0 +1,13 @@ +package admin + +import "errors" + +var ErrNotImplemented = errors.New("not implemented on linux") + +func RunSelfElevated() error { + return ErrNotImplemented +} + +func Admin() bool { + return true +} diff --git a/admin/admin_windows.go b/admin/admin_windows.go new file mode 100644 index 0000000..50936ff --- /dev/null +++ b/admin/admin_windows.go @@ -0,0 +1,41 @@ +package admin + +import ( + "fmt" + "os" + "strings" + "syscall" + + "golang.org/x/sys/windows" +) + +func RunSelfElevated() error { + verb := "runas" + exe, _ := os.Executable() + cwd, _ := os.Getwd() + args := strings.Join(os.Args[1:], " ") + + verbPtr, _ := syscall.UTF16PtrFromString(verb) + exePtr, _ := syscall.UTF16PtrFromString(exe) + cwdPtr, _ := syscall.UTF16PtrFromString(cwd) + argPtr, _ := syscall.UTF16PtrFromString(args) + + var showCmd int32 = 1 //SW_NORMAL + + err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) + if err != nil { + fmt.Println(err) + } + + return nil +} + +func Admin() bool { + _, err := os.Open("\\\\.\\PHYSICALDRIVE0") + if err != nil { + fmt.Println("admin no") + return false + } + fmt.Println("admin yes") + return true +} diff --git a/main.go b/main.go index 980278a..7d25434 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "path/filepath" + "s1d3sw1ped/cpms/admin" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" @@ -53,17 +54,26 @@ func loadConfig() *Config { return &cfg } -var cfg = loadConfig() +var cfg *Config func main() { + if !admin.Admin() { + if err := admin.RunSelfElevated(); err != nil { + panic(err) + } + os.Exit(0) + } + + cfg = loadConfig() + ap := app.New() wp := ap.NewWindow("Cyberpunk Mod Switcher") - wp.Resize(fyne.NewSize(768, 768)) + wp.Resize(fyne.NewSize(600, 1)) wp.CenterOnScreen() grid := container.NewVBox() scroll := container.NewVScroll(grid) - scroll.SetMinSize(fyne.NewSize(-1, 768)) + scroll.SetMinSize(fyne.NewSize(-1, 400)) //load grid fillGrid(grid, wp)