我正在尝试通过 Visual Basic 获取安装在我的 PC 上的物理内存量(总 RAM)。问题是我得到的返回“0 字节”。此外,我还将尝试获取使用百分比,可用 RAM 的数量、总分页、可用页面和显示使用情况的图表,如 Windows 中的 RAM 资源监视器。问题是我无法首先获得正确数量的可用 RAM 以与其他人一起推进。
我做错了什么?谢谢你。
这是我的代码:
Option Strict On
Option Explicit On
Imports System.Math
Imports System.Management
Imports System.Runtime.InteropServices
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " API "
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Private Structure MEMORYSTATUSEX
Dim dwLength As Integer
Dim dwMemoryLoad As Integer
Dim ullTotalPhys As ULong
End Structure
Private memoryInfo As MEMORYSTATUSEX
Private Declare Auto Sub GlobalMemoryStatusEx Lib "kernel32" (ByRef lpBuffer As MEMORYSTATUSEX)
#End Region
#Region " Variables "
Private mullTotalRAM As ULong
#End Region
#Region " Form Events "
Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
' set title
Me.Text = My.Application.Info.Title & " " & My.Application.Info.Version.Major.ToString & "." & _
My.Application.Info.Version.Minor.ToString
Application.DoEvents()
GetMemoryInfo()
Timer1.Enabled = True
End Sub
#End Region
#Region " Information Gathering and Display "
Private Sub GetMemoryInfo()
System.Windows.Forms.Application.DoEvents()
' set size of structure (required by this api call)
memoryInfo.dwLength = Marshal.SizeOf(memoryInfo)
GlobalMemoryStatusEx(memoryInfo)
mullTotalRAM = memoryInfo.ullTotalPhys
txtRAM.Text = FormatBytes(mullTotalRAM)
End Sub
#End Region
#Region " Update Timer "
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
GetMemoryInfo()
Application.DoEvents()
End Sub
#End Region
#Region " Formatting Routines "
Private Function FormatBytes(ByVal ullBytes As ULong) As String
Dim dblTemp As Double
Try
Select Case ullBytes
Case Is >= 1073741824 'GB
dblTemp = CDbl(ullBytes / 1073741824)
Return FormatNumber(dblTemp, 2) & " GB"
Case 1048576 To 1073741823
dblTemp = CDbl(ullBytes / 1048576) 'MB
Return FormatNumber(dblTemp, 0) & " MB"
Case 1024 To 1048575
dblTemp = CDbl(ullBytes / 1024) 'KB
Return FormatNumber(dblTemp, 0) & " KB"
Case 0 To 1023
dblTemp = ullBytes ' bytes
Return FormatNumber(dblTemp, 0) & " bytes"
Case Else
Return ""
End Select
Catch
Return ""
End Try
End Function
#End Region
Private Sub ramaTotalRAM_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ramaTotalRAM.Enter
End Sub
Private Sub txtRAM_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtRAM.TextChanged
End Sub
End Class
我已经解决了这个问题。现在我想知道是否可以制作这样的东西: http : //s18.postimage.org/7zn5adst3/Memory.jpg 。我该怎么做。非常感谢。