github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/internal/system/operatingsystem/version_windows.go (about)

     1  //go:build windows
     2  
     3  package operatingsystem
     4  
     5  import (
     6  	"strconv"
     7  
     8  	"golang.org/x/sys/windows/registry"
     9  )
    10  
    11  type WindowsVersionInfo struct {
    12  	Major          int
    13  	Minor          int
    14  	Build          int
    15  	DisplayVersion string
    16  }
    17  
    18  func (w *WindowsVersionInfo) IsWindowsVersionAtLeast(major, minor, buildNumber int) bool {
    19  	return w.Major >= major && w.Minor >= minor && w.Build >= buildNumber
    20  }
    21  
    22  func GetWindowsVersionInfo() (*WindowsVersionInfo, error) {
    23  	key, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE)
    24  	if err != nil {
    25  		return nil, err
    26  	}
    27  
    28  	return &WindowsVersionInfo{
    29  		Major:          regDWORDKeyAsInt(key, "CurrentMajorVersionNumber"),
    30  		Minor:          regDWORDKeyAsInt(key, "CurrentMinorVersionNumber"),
    31  		Build:          regStringKeyAsInt(key, "CurrentBuildNumber"),
    32  		DisplayVersion: regKeyAsString(key, "DisplayVersion"),
    33  	}, nil
    34  }
    35  
    36  func regDWORDKeyAsInt(key registry.Key, name string) int {
    37  	result, _, err := key.GetIntegerValue(name)
    38  	if err != nil {
    39  		return -1
    40  	}
    41  	return int(result)
    42  }
    43  
    44  func regStringKeyAsInt(key registry.Key, name string) int {
    45  	resultStr, _, err := key.GetStringValue(name)
    46  	if err != nil {
    47  		return -1
    48  	}
    49  	result, err := strconv.Atoi(resultStr)
    50  	if err != nil {
    51  		return -1
    52  	}
    53  	return result
    54  }
    55  
    56  func regKeyAsString(key registry.Key, name string) string {
    57  	resultStr, _, err := key.GetStringValue(name)
    58  	if err != nil {
    59  		return ""
    60  	}
    61  	return resultStr
    62  }