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 }