40 lines
936 B
Go
40 lines
936 B
Go
//go:build windows
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"golang.org/x/sys/windows/registry"
|
|
)
|
|
|
|
const (
|
|
runKeyPath = `Software\Microsoft\Windows\CurrentVersion\Run`
|
|
runValueName = "GoWallpaper"
|
|
)
|
|
|
|
func setStartWithWindows(enabled bool) error {
|
|
key, err := registry.OpenKey(registry.CURRENT_USER, runKeyPath, registry.QUERY_VALUE|registry.SET_VALUE)
|
|
if err != nil {
|
|
return fmt.Errorf("打开开机启动设置: %w", err)
|
|
}
|
|
defer key.Close()
|
|
if !enabled {
|
|
if err := key.DeleteValue(runValueName); err != nil && err != registry.ErrNotExist {
|
|
return fmt.Errorf("删除开机启动项: %w", err)
|
|
}
|
|
return nil
|
|
}
|
|
exe, err := os.Executable()
|
|
if err != nil {
|
|
return fmt.Errorf("获取程序路径: %w", err)
|
|
}
|
|
command := `"` + strings.ReplaceAll(exe, `"`, `\"`) + `"`
|
|
if err := key.SetStringValue(runValueName, command); err != nil {
|
|
return fmt.Errorf("写入开机启动项: %w", err)
|
|
}
|
|
return nil
|
|
}
|