在VB中API函数获得系统信息
这学期开VB,为了熟悉VB的环境,我决定写一个简单的东西来熟悉VB的编程环境.不过写了一点的时候就发现需要用到API函数才能完成程序所完成的功能,所以又学习以下API函数的使用(主要是关于注册标的操作).下面就如何在VB下利用API函数获得系统信息的方法,希望对大家的学习有所帮助.
首先是获得当前用户的用户名,用的是API函数 GetComputerName ,该函数在VB中的声明是:
Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long (注意:VB中API函数的声明必须在一行上,还有窗体层内定义的API函数都应该定义成Private 的,不然编译是就会出错.另外,顺便说一下,VB虽然也支持面向对象的编程,但只能是实现面向对象的部分功能).
其参数说明如下:
lpBuffer String,随同计算机名载入的字串缓冲区;
nSize Long,缓冲区的长度。这个变量随同返回计算机名的实际长度载入;
其实现过成如下:
Dim len As Long 'computer 名字的长度
Dim aa As Long '返回函数调用是否成功,TRUE(非零)表示成功,否则返回零
Dim cmprName As String '计算机名(当前用户的用户名)的字符串
cmprName = String(255, 0)
len = 256
aa = GetComputerName(cmprName, len) '取得这台计算机的名称
cmprName = Left(cmprName, InStr(1, cmprName, Chr(0)) - 1)
cname.Caption = cmprName '将计算机当前用户名输出在cname标签上(以下都是用标签做输出).
接着就是CPU的信息了.在API函数中好象没有直接关于CPU的信息(虽然我对API函数知道的有现,但我查了一下,没有,不知道是不是有我没有找到).既然没有直接关于CPU信息的API函数,我就想到注册表里面肯定有CPU的相关信息.我查了一下注册表,发现有关CPU的信息都在键"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\system\CentralProcessor\0"下,关于CPU有的型号在"ProcessorNameString"里面.接下来就是如何读取注册表的值了.VB中用RegOpenKey和RegQueryValueEx两个api来完成读取注册表的值.其中RegOpenKey是打开注册表中一个指定的键;RegQueryValueEx函数来读取某个Key的指定名称的值(value),这两个函数的声明及参数说明如下:
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA"
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
参数类型及说明:
hKey:Key Handle
lpSubKey:SubKey名称或路径
phkResult:若RegOpenKey执行成功,则这一参数返回Subkey的hKey.
返回值: =0,表示成功;≠0,表示失败。[注意这一点与别的API函数不太一样]
Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
参数类型及说明:
hKey: Key Handle
lpSubKey:SubKey名称路径
lpValue:返回读取的Default Value
lpcbValue:传入lpValue参数的长度,若成功读取了默认值default value,则返回default value字符串的长 度(含chr(0))这个和C语言中字符串的处理相似,都是以chr(0)作为结束符。
返回值: =0,表示成功;≠0,表示失败。
具体实现如下:
Dim hKey As Long
Dim ret As Long
Dim lenData As Long
Dim typedata As Long
Dim name As String
Dim cpu As String
Const HKEY_LOCAL_MACHINE = &H80000002 '定义常量HKEY_LOCAL_MACHINE的值(请参曰MSDN)
name = "ProcessorNameString"
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "HARDWARE\DESCRIPTION\system\CentralProcessor\0", hKey)
If ret = 0 Then
ret = RegQueryValueEx(hKey, name, 0, typedata, ByVal vbNullString, lenData)
End If
ret = RegQueryValueEx(hKey, name, 0, typedata, ByVal vbNullString, lenData)
cpu = String(lenData, Chr(0))
RegQueryValueEx hKey, name, 0, typedata, ByVal cpu, lenData
接下来就是内存的信息了,获得内存信息用的是GlobalMemoryStatus函数,再用之前先说明以下关于内存的结构体MEMORYSTATUS,其实现如下:
Type MEMORYSTATUS '指向内存的结构体
dwLength As Long 'MEMORYSTATUS的大小
dwMemoryLoad As Long '内存利用百分比
dwTotalPhys As Long '物理内存大小
dwAvailPhys As Long '可用物理内存的大小
dwTotalPageFile As Long '页面文件的大小
dwAvailPageFile As Long '可用页面文件的大小
dwTotalVirtual As Long '虚拟内存大小 ??
dwAvailVirtual As Long '可用虚拟内存大小 ??
End Type
具体实现内存如下:
Dim mem As MEMORYSTATUS
GlobalMemoryStatus mem
MemSize.Caption = "物理内存:" & CInt(mem.dwTotalPhys / 1024 / 1024) & "M"
MemSize.Caption = MemSize.Caption & " 可用物理内存: " & CInt(mem.dwAvailPhys / 1024 / 1024) & "M" & vbCrLf
MemSize.Caption = MemSize.Caption & vbCrLf
' MemSize.Caption = MemSize.Caption & "虚拟内存大小: " & CInt(mem.dwTotalPageFile / 1024 / 1024) & ' "M"
最后就是如何得OS版本:用API函数仅能得到WINDOWS的内部版本如得到WIN XP的版本是5.1,至于如何把它转化成WIN XP,
在这里就不多讲,具体实现如下:
Type OSVERSIONINFO '指向WINDOWS版本信息的结构体
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 ' Maintenance string for PSS usage
Osname As String 'os名称
Private Function GetWindowsVersion() As OSVERSIONINFO '得到系统版本
Dim ver As OSVERSIONINFO
ver.dwOSVersionInfoSize = 148
GetVersionEx ver
With ver
Select Case .dwPlatformId
Case 1
Select Case .dwMinorVersion
Case 0
.Osname = "Windows 95"
Case 10
.Osname = "Windows 98"
Case 90
.Osname = "Windows Mellinnium"
End Select
Case 2
Select Case .dwMajorVersion
Case 3
.Osname = "Windows NT 3.51"
Case 4
.Osname = "Windows NT 4.0"
Case 5
If .dwMinorVersion = 0 Then
.Osname = "Windows 2000"
Else
.Osname = "Windows XP"
End If
End Select
Case Else
.Osname = "Failed"
End Select
End With
GetWindowsVersion = ver
End Function
这就是我用VB得到系统信息的程序实现过程,虽然程序很简单,但我还是学到了很多.其实有一个更简单的方法就是用shell函数调用Windows自带的系统信息函数,调用格式如下:
shell "C:\Program Files\Common Files\Microsoft Shared\MSINFO\msinfo32.exe",顺便说一下,shell函数可调用所有的可执行程序,在shell后面加上所有可执行程序的路径就可以了.
最后,我觉得学习的过程中,相互学习的过程是很重要的,就那上面的程序来说吧,其中关于如何得到OS版本的东西就是从CSDN的一篇帖子里学到的.
不知道这些东西对大家有没有帮助,但愿有吧! 欢迎大家和我讨论关于计算机方面的知识,当然其他任何方面也都可以.
我的邮箱是:HCJ_2005@163.COM,QQ:250484418.
首先是获得当前用户的用户名,用的是API函数 GetComputerName ,该函数在VB中的声明是:
Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long (注意:VB中API函数的声明必须在一行上,还有窗体层内定义的API函数都应该定义成Private 的,不然编译是就会出错.另外,顺便说一下,VB虽然也支持面向对象的编程,但只能是实现面向对象的部分功能).
其参数说明如下:
lpBuffer String,随同计算机名载入的字串缓冲区;
nSize Long,缓冲区的长度。这个变量随同返回计算机名的实际长度载入;
其实现过成如下:
Dim len As Long 'computer 名字的长度
Dim aa As Long '返回函数调用是否成功,TRUE(非零)表示成功,否则返回零
Dim cmprName As String '计算机名(当前用户的用户名)的字符串
cmprName = String(255, 0)
len = 256
aa = GetComputerName(cmprName, len) '取得这台计算机的名称
cmprName = Left(cmprName, InStr(1, cmprName, Chr(0)) - 1)
cname.Caption = cmprName '将计算机当前用户名输出在cname标签上(以下都是用标签做输出).
接着就是CPU的信息了.在API函数中好象没有直接关于CPU的信息(虽然我对API函数知道的有现,但我查了一下,没有,不知道是不是有我没有找到).既然没有直接关于CPU信息的API函数,我就想到注册表里面肯定有CPU的相关信息.我查了一下注册表,发现有关CPU的信息都在键"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\system\CentralProcessor\0"下,关于CPU有的型号在"ProcessorNameString"里面.接下来就是如何读取注册表的值了.VB中用RegOpenKey和RegQueryValueEx两个api来完成读取注册表的值.其中RegOpenKey是打开注册表中一个指定的键;RegQueryValueEx函数来读取某个Key的指定名称的值(value),这两个函数的声明及参数说明如下:
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA"
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
参数类型及说明:
hKey:Key Handle
lpSubKey:SubKey名称或路径
phkResult:若RegOpenKey执行成功,则这一参数返回Subkey的hKey.
返回值: =0,表示成功;≠0,表示失败。[注意这一点与别的API函数不太一样]
Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
参数类型及说明:
hKey: Key Handle
lpSubKey:SubKey名称路径
lpValue:返回读取的Default Value
lpcbValue:传入lpValue参数的长度,若成功读取了默认值default value,则返回default value字符串的长 度(含chr(0))这个和C语言中字符串的处理相似,都是以chr(0)作为结束符。
返回值: =0,表示成功;≠0,表示失败。
具体实现如下:
Dim hKey As Long
Dim ret As Long
Dim lenData As Long
Dim typedata As Long
Dim name As String
Dim cpu As String
Const HKEY_LOCAL_MACHINE = &H80000002 '定义常量HKEY_LOCAL_MACHINE的值(请参曰MSDN)
name = "ProcessorNameString"
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "HARDWARE\DESCRIPTION\system\CentralProcessor\0", hKey)
If ret = 0 Then
ret = RegQueryValueEx(hKey, name, 0, typedata, ByVal vbNullString, lenData)
End If
ret = RegQueryValueEx(hKey, name, 0, typedata, ByVal vbNullString, lenData)
cpu = String(lenData, Chr(0))
RegQueryValueEx hKey, name, 0, typedata, ByVal cpu, lenData
接下来就是内存的信息了,获得内存信息用的是GlobalMemoryStatus函数,再用之前先说明以下关于内存的结构体MEMORYSTATUS,其实现如下:
Type MEMORYSTATUS '指向内存的结构体
dwLength As Long 'MEMORYSTATUS的大小
dwMemoryLoad As Long '内存利用百分比
dwTotalPhys As Long '物理内存大小
dwAvailPhys As Long '可用物理内存的大小
dwTotalPageFile As Long '页面文件的大小
dwAvailPageFile As Long '可用页面文件的大小
dwTotalVirtual As Long '虚拟内存大小 ??
dwAvailVirtual As Long '可用虚拟内存大小 ??
End Type
具体实现内存如下:
Dim mem As MEMORYSTATUS
GlobalMemoryStatus mem
MemSize.Caption = "物理内存:" & CInt(mem.dwTotalPhys / 1024 / 1024) & "M"
MemSize.Caption = MemSize.Caption & " 可用物理内存: " & CInt(mem.dwAvailPhys / 1024 / 1024) & "M" & vbCrLf
MemSize.Caption = MemSize.Caption & vbCrLf
' MemSize.Caption = MemSize.Caption & "虚拟内存大小: " & CInt(mem.dwTotalPageFile / 1024 / 1024) & ' "M"
最后就是如何得OS版本:用API函数仅能得到WINDOWS的内部版本如得到WIN XP的版本是5.1,至于如何把它转化成WIN XP,
在这里就不多讲,具体实现如下:
Type OSVERSIONINFO '指向WINDOWS版本信息的结构体
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 ' Maintenance string for PSS usage
Osname As String 'os名称
Private Function GetWindowsVersion() As OSVERSIONINFO '得到系统版本
Dim ver As OSVERSIONINFO
ver.dwOSVersionInfoSize = 148
GetVersionEx ver
With ver
Select Case .dwPlatformId
Case 1
Select Case .dwMinorVersion
Case 0
.Osname = "Windows 95"
Case 10
.Osname = "Windows 98"
Case 90
.Osname = "Windows Mellinnium"
End Select
Case 2
Select Case .dwMajorVersion
Case 3
.Osname = "Windows NT 3.51"
Case 4
.Osname = "Windows NT 4.0"
Case 5
If .dwMinorVersion = 0 Then
.Osname = "Windows 2000"
Else
.Osname = "Windows XP"
End If
End Select
Case Else
.Osname = "Failed"
End Select
End With
GetWindowsVersion = ver
End Function
这就是我用VB得到系统信息的程序实现过程,虽然程序很简单,但我还是学到了很多.其实有一个更简单的方法就是用shell函数调用Windows自带的系统信息函数,调用格式如下:
shell "C:\Program Files\Common Files\Microsoft Shared\MSINFO\msinfo32.exe",顺便说一下,shell函数可调用所有的可执行程序,在shell后面加上所有可执行程序的路径就可以了.
最后,我觉得学习的过程中,相互学习的过程是很重要的,就那上面的程序来说吧,其中关于如何得到OS版本的东西就是从CSDN的一篇帖子里学到的.
不知道这些东西对大家有没有帮助,但愿有吧! 欢迎大家和我讨论关于计算机方面的知识,当然其他任何方面也都可以.
我的邮箱是:HCJ_2005@163.COM,QQ:250484418.
...全文
相关推荐
VB编程源代码 82获得系统的信息.rar
VB编程源代码 82获得系统的信息.rar
掌握VB编程:API函数深入应用指南
本文还有配套的精品资源,点击获取 简介:Visual Basic中的API函数允许开发者调用操作系统级别的功能,这些功能不包含在标准的VB库中。API函数以动态链接库(DLL)形式存在,开发者通过 Declare 语句在VB代码中声明和使用。本文介绍了如何声明和使用常见的API函数,强调了使用API函数的扩展性、效率和兼容性优势,以及使用时必须注意的细节。文章...
VB API实例精讲:快速精通常用API应用
Visual Basic(简称VB),是微软公司推出的一款简单、高效、面向对象的编程语言。自1991年首次发布以来,VB因其易用性和灵活性受到广泛欢迎,并在软件开发领域扮演了重要角色。VB的核心是“可视化”设计,它使得开发者能够通过图形用户界面设计程序,显著降低了编程的门槛。尽管在现代编程语言的浪潮中,VB的地位有所下降,但它仍是学习编程、快速开发小型应用程序或原型的理想选择。
获得系统的信息硬盘显示器内存.zip_获得系统信息
获得系统的信息硬盘显示器内存,适合做监控程序
Visual Basic 6 API函数开发实例
对于从事Visual Basic 6 API函数为一本有价值的自学和参考书


API
