Previous | Contents | Next

## C.5 Get Windows version

     ; GetWindowsVersion

     ;

     ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/

     ; Updated by Joost Verburg

     ;

     ; Returns on top of stack

     ;

     ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003, Vista)

     ; or

     ; '' (Unknown Windows Version)

     ;

     ; Usage:

     ;   Call GetWindowsVersion

     ;   Pop $R0

     ;   ; at this point $R0 is "NT 4.0" or whatnot

     Function GetWindowsVersion

       Push $R0

       Push $R1

       ClearErrors

       ReadRegStr $R0 HKLM \

       "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion

       IfErrors 0 lbl_winnt

       ; we are not NT

       ReadRegStr $R0 HKLM \

       "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber

       StrCpy $R1 $R0 1

       StrCmp $R1 '4' 0 lbl_error

       StrCpy $R1 $R0 3

       StrCmp $R1 '4.0' lbl_win32_95

       StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98

       lbl_win32_95:

         StrCpy $R0 '95'

       Goto lbl_done

       lbl_win32_98:

         StrCpy $R0 '98'

       Goto lbl_done

       lbl_win32_ME:

         StrCpy $R0 'ME'

       Goto lbl_done

       lbl_winnt:

       StrCpy $R1 $R0 1

       StrCmp $R1 '3' lbl_winnt_x

       StrCmp $R1 '4' lbl_winnt_x

       StrCpy $R1 $R0 3

       StrCmp $R1 '5.0' lbl_winnt_2000

       StrCmp $R1 '5.1' lbl_winnt_XP

       StrCmp $R1 '5.2' lbl_winnt_2003

       StrCmp $R1 '6.0' lbl_winnt_vista lbl_error

       lbl_winnt_x:

         StrCpy $R0 "NT $R0" 6

       Goto lbl_done

       lbl_winnt_2000:

         Strcpy $R0 '2000'

       Goto lbl_done

       lbl_winnt_XP:

         Strcpy $R0 'XP'

       Goto lbl_done

       lbl_winnt_2003:

         Strcpy $R0 '2003'

       Goto lbl_done

       lbl_winnt_vista:

         Strcpy $R0 'Vista'

       Goto lbl_done

       lbl_error:

         Strcpy $R0 ''

       lbl_done:

       Pop $R1

       Exch $R0

     FunctionEnd

Previous | Contents | Next