DOCUMENT:Q188987 10-MAR-2000 [foxpro] TITLE :HOWTO: Determine the Operating System Build Number PRODUCT :Microsoft FoxPro PROD/VER:WINDOWS:3.0,3.0b,5.0,5.0a OPER/SYS: KEYWORDS:kbCodeSnippet ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual FoxPro for Windows, versions 3.0, 3.0b, 5.0, 5.0a ------------------------------------------------------------------------------- SUMMARY ======= Visual FoxPro's OS() function allows you to determine the major and minor versions of the host operating system. To determine the operating system build number programmatically, you must use the GetVersionEx() application programming interface (API) call. NOTE: The GetVersionEx() function, when run under Visual FoxPro 3.0 or 3.0b on 16-bit Windows, can return the Win32s version and build numbers. MORE INFORMATION ================ Run the following sample program. A message box containing the major and minor version, the text name of the host operating system and the build number displays. Here is the sample code: #DEFINE VER_PLATFORM_WIN32S 0 #DEFINE VER_PLATFORM_WIN32_WINDOWS 1 #DEFINE VER_PLATFORM_WIN32_NT 2 #DEFINE FFFF 65535 #DEFINE CR CHR(13) DECLARE GetVersionEx IN win32api STRING @OSVERSIONINFO * The OSVERSIONINFO structure is 148 bytes long. m.osversion = long2str(148) + REPLICATE(CHR(0), 144) =GetVersionEx(@m.osversion) m.major = str2long(SUBSTR(m.osversion, 5, 4)) m.minor = str2long(SUBSTR(m.osversion, 9, 4)) m.build = str2long(SUBSTR(m.osversion, 13, 4)) m.platform = str2long(SUBSTR(m.osversion, 17, 4)) m.spversion = STRTRAN(SUBSTR(m.osVersion, 21), CHR(0), "") m.platformname = "" DO CASE CASE m.platform = VER_PLATFORM_WIN32S m.platformname = "Win32s on Windows 3.1" CASE m.platform = VER_PLATFORM_WIN32_WINDOWS m.platformname = "Win32 on Windows 9x" CASE m.platform = VER_PLATFORM_WIN32_NT m.platformname = "Windows NT/2000" ENDCASE * Build must be ANDed with FFFFh per Microsoft Knowledge Base * Article, Q92395. m.build = BITAND(m.build, FFFF) =MESSAGEBOX("Major version:" + STR(m.major) + CR + ; "Minor version: " + STR(m.minor) + CR + ; "Supported platform: " + STR(m.platform) + ; " (" + m.platformname + ")" + CR + ; "Build number: " + STR(m.build) + ; IIF(NOT EMPTY(m.spversion), ; CR + m.spVersion, ""), ; 0 + 64 + 0, ; "GetVersionEx() results") * Function long2str - convert 4-byte integer into low-high format * Character string. FUNCTION long2str PARAMETERS m.longval PRIVATE i, m.retstr m.retstr = "" FOR i = 24 TO 0 STEP -8 m.retstr = CHR(INT(m.longval/(2^i))) + m.retstr m.longval = MOD(m.longval, (2^i)) NEXT RETURN m.retstr * Function STR2LONG - convert lo-high ascii character representation * into 4-byte integer. FUNCTION str2long PARAMETERS m.longstr PRIVATE i, m.retval m.retval = 0 FOR i = 0 TO 24 STEP 8 m.retval = m.retval + (ASC(m.longstr) * (2^i)) m.longstr = RIGHT(m.longstr, LEN(m.longstr) - 1) NEXT RETURN m.retval REFERENCES ========== For additional information about checking system versions, please see the GetVersion() and GetVersionEx() API documentation in the Windows System Information section of the Platform SDK documentation. Additional query words: GetVersionEx kbnokeyword ====================================================================== Keywords : kbCodeSnippet Technology : kbVFPsearch kbAudDeveloper kbVFP300 kbVFP300b kbVFP500 kbVFP500a Version : WINDOWS:3.0,3.0b,5.0,5.0a Issue type : kbhowto ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2000.