Windows OS name

This code detects the operating system name on windows.

Sources:


namespace eval windows_os {

    array set desktop_versions {
        10.0 {Windows 10}
        6.3 {Windows 8.1}
        6.2 {Windows 8}
        6.1 {Windows 7}
        6.0 {Windows Vista}
        5.2 {Windows XP 64-Bit Edition}
        5.1 {Windows XP}
        5.0 {Windows 2000}
    }
    
    
    proc windows_name {} {
        if {$::tcl_platform(platform) eq "windows"} {
            variable desktop_versions
            
            package require registry
            
            if {[catch {
                set major_version [registry get {HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion} CurrentMajorVersionNumber]
                set minor_version [registry get {HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion} CurrentMinorVersionNumber]
            }]} {
                set windows_version [registry get {HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion} CurrentVersion]
            } else {
                set windows_version $major_version.$minor_version
            }
            
            return $desktop_versions($windows_version)
        } else {
            error "Operating system is not windows"
        }
    }
    
}

See also: tcl_platform

set windows_version $::tcl_platform(osVersion)

But note that tcl_platform(osVersion) may not be completely reliable with old Tcl versions on new windows platforms due to Windows API artifacts.