//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)
|
}
|