//go:build windows package startup import ( "fmt" "os" "golang.org/x/sys/windows/registry" ) const registryKey = `SOFTWARE\Microsoft\Windows\CurrentVersion\Run` const appName = "PrivateVoice Input" var legacyAppNames = []string{"VoiceSnap"} func isEnabled() bool { removeLegacyValues() key, err := registry.OpenKey(registry.CURRENT_USER, registryKey, registry.QUERY_VALUE) if err != nil { return false } defer key.Close() val, _, err := key.GetStringValue(appName) return err == nil && val != "" } func setEnabled(enable bool) error { key, err := registry.OpenKey(registry.CURRENT_USER, registryKey, registry.SET_VALUE) if err != nil { return fmt.Errorf("failed to open registry key: %w", err) } defer key.Close() if enable { exe, err := os.Executable() if err != nil { return err } deleteLegacyValues(key) return key.SetStringValue(appName, fmt.Sprintf(`"%s"`, exe)) } err = key.DeleteValue(appName) deleteLegacyValues(key) if err != nil && err != registry.ErrNotExist { return err } return nil } func deleteLegacyValues(key registry.Key) { for _, name := range legacyAppNames { _ = key.DeleteValue(name) } } func removeLegacyValues() { key, err := registry.OpenKey(registry.CURRENT_USER, registryKey, registry.SET_VALUE) if err != nil { return } defer key.Close() deleteLegacyValues(key) }