DOCUMENT:Q161151 21-MAR-1997 [vbwin] TITLE :HOWTO: Get Windows Status Information via API Calls PRODUCT :Microsoft Visual Basic for Windows PROD/VER:5.0 OPER/SYS:WINDOWS KEYWORDS:kbui kbusage vb5all vb5howto VBKBWinAPI VBKBWindowing_VBKB kbhowto ====================================================================== --------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual Basic Control Creation, Learning, Professional, and Enterprise Editions, for Windows, version 5.0 --------------------------------------------------------------------- SUMMARY ======= The Visual Basic for Windows sample program below demonstrates how you can obtain system status information similar to the information displayed in the Windows Program Manager About box. The sample program displays the following information using the Windows API functions indicated: - The Windows version number with the GetVersion function. - The CPU processor type. - Memory information for total physical memory, available physical memory, total virtual memory, and available virtual memory. MORE INFORMATION ================ Steps to Create Example Program ------------------------------- 1. Start Visual Basic 5.0 and select Standard EXE. If Visual Basic 5.0 is already running, click New Project on the File menu, and select Standard EXE. Form1 is created by default. 2. On the Project menu, click Add Module (press ALT,P,M). Module1 is created by default. 3. Enter the following code into the General Declarations section of a code module: Type SYSTEM_INFO dwOemID As Long dwPageSize As Long lpMinimumApplicationAddress As Long lpMaximumApplicationAddress As Long dwActiveProcessorMask As Long dwNumberOrfProcessors As Long dwProcessorType As Long dwAllocationGranularity As Long dwReserved As Long End Type Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type Type MEMORYSTATUS dwLength As Long dwMemoryLoad As Long dwTotalPhys As Long dwAvailPhys As Long dwTotalPageFile As Long dwAvailPageFile As Long dwTotalVirtual As Long dwAvailVirtual As Long End Type Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _ (LpVersionInformation As OSVERSIONINFO) As Long Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As _ MEMORYSTATUS) Declare Sub GetSystemInfo Lib "kernel32" (lpSystemInfo As _ SYSTEM_INFO) Public Const PROCESSOR_INTEL_386 = 386 Public Const PROCESSOR_INTEL_486 = 486 Public Const PROCESSOR_INTEL_PENTIUM = 586 Public Const PROCESSOR_MIPS_R4000 = 4000 Public Const PROCESSOR_ALPHA_21064 = 21064 4. Enter the following code into the Form_Load procedure of Form1: Private Sub Form_Load() Dim msg As String ' Status information. Show MousePointer = 11 ' Hourglass. ' Get operating system and version. Dim verinfo As OSVERSIONINFO Dim build As String, ver_major As String, ver_minor As String Dim ret As Long verinfo.dwOSVersionInfoSize = Len(verinfo) ret = GetVersionEx(verinfo) If ret = 0 Then MsgBox "Error Getting Version Information" End End If Select Case verinfo.dwPlatformId Case 0 msg = msg & "Windows 32s " Case 1 msg = msg & "Windows 95 " Case 2 msg = msg & "Windows NT " End Select ver_major = verinfo.dwMajorVersion ver_minor = verinfo.dwMinorVersion build = verinfo.dwBuildNumber msg = msg & ver_major & "." & ver_minor msg = msg & " (Build " & build & ")" & vbCrLf & vbCrLf ' Get CPU type and operating mode. Dim sysinfo As SYSTEM_INFO GetSystemInfo sysinfo msg = msg & "CPU: " Select Case sysinfo.dwProcessorType Case PROCESSOR_INTEL_386 msg = msg & "Intel 386" & vbCrLf Case PROCESSOR_INTEL_486 msg = msg & "Intel 486" & vbCrLf Case PROCESSOR_INTEL_PENTIUM msg = msg & "Intel Pentium" & vbCrLf Case PROCESSOR_MIPS_R4000 msg = msg & "MIPS R4000" & vbCrLf Case PROCESSOR_ALPHA_21064 msg = msg & "DEC Alpha 21064" & vbCrLf Case Else msg = msg & "(unknown)" & vbCrLf End Select msg = msg & vbCrLf ' Get free memory. Dim memsts As MEMORYSTATUS Dim memory As Long GlobalMemoryStatus memsts memory = memsts.dwTotalPhys msg = msg & "Total Physical Memory: " msg = msg & Format$(memory \ 1024, "###,###,###") & "K" _ & vbCrLf memory& = memsts.dwAvailPhys msg = msg & "Available Physical Memory: " msg = msg & Format$(memory \ 1024, "###,###,###") & "K" _ & vbCrLf memory& = memsts.dwTotalVirtual msg = msg & "Total Virtual Memory: " msg = msg & Format$(memory \ 1024, "###,###,###") & "K" _ & vbCrLf memory& = memsts.dwAvailVirtual msg = msg & "Available Virtual Memory: " msg = msg & Format$(memory \ 1024, "###,###,###") & "K" _ & vbCrLf & vbCrLf Print msg MousePointer = 0 End Sub 5. On the Run menu, click Start, or press the F5 key to start the program. Pass the cursor over each button to display the ToolTip describing the button's function. Click the button to perform the function. Additional query words: API RESOURCE ====================================================================== Keywords : kbui kbusage vb5all vb5howto VBKBWinAPI VBKBWindowing_VBKB kbhowto Version : 5.0 Platform : WINDOWS 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 1997.