也许有人发现这很有用:
const regKey = `SOFTWARE\Microsoft\Windows NT\CurrentVersion`
func getSettingsFromRegistry() (settings map[string]string, error) {
settings = make(map[string]string)
k, err := registry.OpenKey(registry.LOCAL_MACHINE, regKey, registry.QUERY_VALUE)
if err != nil {
return fmt.Errorf("open registry key %q: %w", regKey, err)
}
defer k.Close()
params, err := k.ReadValueNames(0)
if err != nil {
return fmt.Errorf("read value names %q: %w", psaConfRegistry32, err)
}
for _, param := range params {
val, err := getRegistryValueAsString(k, param)
if err != nil {
return fmt.Errorf("get value as string %q: %w", k, err)
}
settings[param] = val
}
self.Log.Printf("%#v\n", settings)
return
}
func getRegistryValueAsString(key registry.Key, subKey string) (string, error) {
valString, _, err := key.GetStringValue(subKey)
if err == nil {
return valString, nil
}
valStrings, _, err := key.GetStringsValue(subKey)
if err == nil {
return strings.Join(valStrings, "\n"), nil
}
valBinary, _, err := key.GetBinaryValue(subKey)
if err == nil {
return string(valBinary), nil
}
valInteger, _, err := key.GetIntegerValue(subKey)
if err == nil {
return strconv.FormatUint(valInteger, 10), nil
}
return "", fmt.Errorf("failed to get type for sub key %q", subKey)
}
REG_BINARY 值将类似于“\x01\x00\x00...”