Skip to content

Instantly share code, notes, and snippets.

@kamermans
Last active February 11, 2021 19:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kamermans/e341fd3158bc1431fb561ef7dc8dc856 to your computer and use it in GitHub Desktop.
Save kamermans/e341fd3158bc1431fb561ef7dc8dc856 to your computer and use it in GitHub Desktop.
Modify PuTTY sessions in Golang by editing the Windows Registry
package main
import (
"fmt"
"net/url"
"golang.org/x/sys/windows/registry"
)
const (
baseKey = `SOFTWARE\SimonTatham\PuTTY\Sessions`
beep = 2 // Flash
fontQuality = 3 // ClearType
font = "Consolas"
)
func main() {
withOpenKey("", registry.ENUMERATE_SUB_KEYS, func(key registry.Key) {
sessions, err := key.ReadSubKeyNames(-1)
checkError(err)
for _, session := range sessions {
sessionNice, _ := url.QueryUnescape(session)
fmt.Printf("%v\n", sessionNice)
withOpenKey(session, registry.SET_VALUE, func(key registry.Key) {
checkError(key.SetStringValue("Font", font))
checkError(key.SetDWordValue("Beep", beep))
checkError(key.SetDWordValue("FontQuality", fontQuality))
})
}
})
}
func checkError(err error) {
if err != nil {
panic(err)
}
}
func withOpenKey(key string, access uint32, innerFunc func(key registry.Key)) {
keyName := baseKey
if key != "" {
keyName += `\` + key
}
k, err := registry.OpenKey(registry.CURRENT_USER, keyName, access)
if err != nil {
checkError(err)
}
defer k.Close()
innerFunc(k)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment