Skip to content

Commit 3bce049

Browse files
committed
feat(daemon): add Windows autostart support
Implement functions to add, remove, and check app presence in Windows startup via registry. Integrate autostart control into CLI.
1 parent cd9706b commit 3bce049

2 files changed

Lines changed: 67 additions & 1 deletion

File tree

internal/cli/cli.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ func Run() {
5656
config.Save()
5757
}
5858
case "4":
59+
if daemon.IsInStartup() {
60+
daemon.RemoveFromStartup()
61+
} else {
62+
daemon.AddToStartup()
63+
}
64+
case "5":
5965
return
6066
}
6167
}
@@ -71,6 +77,13 @@ func printMenu() {
7177
alertsAction = "Disable alerts"
7278
}
7379

80+
autostartStatus := "off"
81+
autostartAction := "Add to startup"
82+
if daemon.IsInStartup() {
83+
autostartStatus = "on"
84+
autostartAction = "Remove from startup"
85+
}
86+
7487
fmt.Printf(`♨️ HotAMD v%s
7588
7689
Status
@@ -79,12 +92,14 @@ Status
7992
Alerts: %s
8093
Alert temp: %d°C
8194
Fan-off alert: %d°C
95+
Autostart: %s
8296
8397
Actions
8498
1) %s
8599
2) Set alert temp
86100
3) Set fan-off alert temp
87-
4) Exit
101+
4) %s
102+
5) Exit
88103
89104
> `,
90105
version,
@@ -93,7 +108,9 @@ Actions
93108
alertsStatus,
94109
config.Config.MaxTemp,
95110
config.Config.MaxFanOffTemp,
111+
autostartStatus,
96112
alertsAction,
113+
autostartAction,
97114
)
98115
}
99116

internal/daemon/daemon.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"time"
1212

1313
"golang.org/x/sys/windows"
14+
"golang.org/x/sys/windows/registry"
1415
)
1516

1617
var eventPtr = win.Utf16("Global\\HotAMD")
@@ -69,3 +70,51 @@ func monitorGPU() {
6970
time.Sleep(10 * time.Second)
7071
}
7172
}
73+
74+
func AddToStartup() {
75+
exePath, err := os.Executable()
76+
if err != nil {
77+
return
78+
}
79+
80+
key, _, err := registry.CreateKey(
81+
registry.CURRENT_USER,
82+
`Software\Microsoft\Windows\CurrentVersion\Run`,
83+
registry.SET_VALUE,
84+
)
85+
if err != nil {
86+
return
87+
}
88+
defer key.Close()
89+
90+
key.SetStringValue("HotAMD", exePath+" --daemon")
91+
}
92+
93+
func RemoveFromStartup() {
94+
key, err := registry.OpenKey(
95+
registry.CURRENT_USER,
96+
`Software\Microsoft\Windows\CurrentVersion\Run`,
97+
registry.SET_VALUE,
98+
)
99+
if err != nil {
100+
return
101+
}
102+
defer key.Close()
103+
104+
key.DeleteValue("HotAMD")
105+
}
106+
107+
func IsInStartup() bool {
108+
key, err := registry.OpenKey(
109+
registry.CURRENT_USER,
110+
`Software\Microsoft\Windows\CurrentVersion\Run`,
111+
registry.QUERY_VALUE,
112+
)
113+
if err != nil {
114+
return false
115+
}
116+
defer key.Close()
117+
118+
_, _, err = key.GetStringValue("HotAMD")
119+
return err == nil
120+
}

0 commit comments

Comments
 (0)