Help and Support

HOW TO: Get Windows Status Information from Windows API in Excel 2000

Article ID:213267
Last Review:August 22, 2007
Revision:3.3
This article was previously published under Q213267
On This Page

SUMMARY

In Microsoft Excel you can programmatically obtain system status information and display it in a worksheet. This step-by-step article provides a sample Microsoft Visual Basic for Applications Sub procedure that displays the following information by using Windows API functions:
The Windows version number with the GetVersionEx API function.
The CPU processor type with the GetSystemInfo API function.
The amount of free memory with the GlobalMemoryStatus API function.

Back to the top

Sample Code to Get Windows Status Information

Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact a Microsoft Certified Partner or the Microsoft fee-based consulting line at (800) 936-5200. For more information about Microsoft Certified Partners, please visit the following Microsoft Web site:
https://partner.microsoft.com/global/30000104 (https://partner.microsoft.com/global/30000104)
For more information about the support options that are available and about how to contact Microsoft, visit the following Microsoft Web site:
http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS (http://support.microsoft.com/default.aspx?scid=fh;en-us;cntactms)
To get Windows status information by using Windows API calls, follow these steps:
1.Start Microsoft Excel, and then create a new workbook.
2.On the Tools menu, point to Macro, and then click Visual Basic Editor (or press ALT+F11).
3.On the Insert menu, click Module.
4.On the module sheet, type the following code:
Option Explicit

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

'The following three Declare lines must be each entered on a single
'line.

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

Sub SystemInformation()
Dim msg As String         ' Status information.
Dim NewLine As String     ' New-line.
Dim ret As Integer        ' OS Information
Dim ver_major As Integer  ' OS Version
Dim ver_minor As Integer  ' Minor Os Version
Dim Build As Long         ' OS Build

      NewLine = Chr(13) + Chr(10)  ' New-line.
      ' Get operating system and version.
      Dim verinfo As OSVERSIONINFO
      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/98 "
          Case 2
              msg = msg + "Windows NT/2000 "
      End Select

      ver_major = verinfo.dwMajorVersion
      ver_minor = verinfo.dwMinorVersion
      Build = verinfo.dwBuildNumber
      msg = msg & ver_major & "." & ver_minor
      msg = msg & " (Build " & Build & ")" & NewLine & NewLine

      ' 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" + NewLine
          Case PROCESSOR_INTEL_486
              msg = msg + "Intel 486" + NewLine
          Case PROCESSOR_INTEL_PENTIUM
              msg = msg + "Intel Pentium" + NewLine
          Case PROCESSOR_MIPS_R4000
              msg = msg + "MIPS R4000" + NewLine
          Case PROCESSOR_ALPHA_21064
              msg = msg + "DEC Alpha 21064" + NewLine
          Case Else
              msg = msg + "(unknown)" + NewLine
      End Select

      msg = msg + NewLine

      ' 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" + NewLine
      memory = memsts.dwAvailPhys
      msg = msg + "Available Physical Memory: "
      msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine
      memory = memsts.dwTotalVirtual
      msg = msg + "Total Virtual Memory: "
      msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine
      memory = memsts.dwAvailVirtual
      msg = msg + "Available Virtual Memory: "
      msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine

      MsgBox msg, vbOKOnly, "System Info"
End Sub
					
5. On the Tools menu, point to Macro, and then click Macros.
6.Click SystemInformation, and then click Run.
The macro returns a message box that shows your system information.

Back to the top

REFERENCES

For more information about how to use the sample code in this article, click the article number below to view the article in the Microsoft Knowledge Base:
212536 (http://support.microsoft.com/kb/212536/EN-US/) OFF2000: How to Run Sample Code from Knowledge Base Articles
For additional information about how to use Windows APIs in Microsoft Visual Basic, click the article numbers below to view the articles in the Microsoft Knowledge Base:
161151 (http://support.microsoft.com/kb/161151/EN-US/) HOWTO: Get Windows Status Information via API Calls
189249 (http://support.microsoft.com/kb/189249/EN-US/) HOWTO: Determine Which 32-Bit Windows Version Is Being Used

Back to the top


APPLIES TO
Microsoft Excel 2000 Standard Edition

Back to the top

Keywords: 
kbdtacode kbhowtomaster kbprogramming KB213267

Back to the top

Article Translations

 

Related Support Centers

Other Support Options

  • Need More Help?
    Contact a Support professional by Email, Online or Phone.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.