在VB中API函数获得系统信息

hcj2002 2003-09-22 09:22:58
这学期开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.
...全文
265 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wx05 2003-09-25
  • 打赏
  • 举报
回复
Public Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
fbmsf 2003-09-24
  • 打赏
  • 举报
回复
得到当前用户的用户名,用的是API函数 GetComputerName??

GetComputerName是计算机名吧。
Kivic 2003-09-23
  • 打赏
  • 举报
回复
支持你的做法
aha99 2003-09-23
  • 打赏
  • 举报
回复
呵呵。。。接分
wingchi 2003-09-23
  • 打赏
  • 举报
回复
:) 接分
道素 2003-09-23
  • 打赏
  • 举报
回复
有个函数很容易被忽略
Private Sub Form_Load()
Dim i As Integer
For i = 1 To 50
list1.AddItem Environ(i)
Next
End Sub
看看得到什么
源码链接: https://pan.quark.cn/s/0f7c75cb3aad ### MIPI Video Mode 与 Command Mode 的差异 #### 一、引言 MIPI (Mobile Industry Processor Interface) 是一种用于连接移动设备处理器及其外围设备的标准化接口。MIPI 接口支持多种协议,其包含 DSI (Display Serial Interface) 和 DCS (Display Control Interface) 等协议。在 MIPI 接口的应用,主要涉及两种工作模式:Video Mode(视频模式)和 Command Mode(命令模式)。本文旨在系统性地阐述这两种模式的工作机制、特性以及实际应用环境。 #### 二、LCD RAM 概念说明 在进一步探讨 MIPI 的两种模式之前,有必要对文提及的“LCD RAM”概念进行明确。实际上,“LCD RAM”并非一个通用术语,而是本文作者用来描述 LCD 控制器用于存储显示数据的内存区域。LCD(Liquid Crystal Display,液晶显示屏)通常配备一个控制 IC(Integrated Circuit,集成电路),该控制 IC 可能内置 RAM 以缓存显示数据。 #### 三、MIPI Video Mode(视频模式) **定义:** - 视频模式是一种类似于传统 RGB 接口的工作模式,它要求主机持续不断地向显示器传输刷新数据。 - 在这种模式下,数据和控制信号以报文的形式通过 MIPI 总线进行传输。 - 显示器本身无需配备帧缓冲器,因为主机会周期性地刷新屏幕。 **特点:** 1. **实时性高:** 主机需要不...
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 在电磁模拟技术,CST(Computer Simulation Technology)是一种被广泛采纳的软件工具,它主要用于电磁场、微波、天线以及射频系统的设计工作。本资料将详细分析CST软件离散端口的具体配置方法,这些方法对于提升仿真结果的精确度和专业水准具有决定性作用。离散端口在CST软件扮演着模拟信号输入或输出的重要角色,它们构成了仿真模型不可或缺的部分。在配置离散端口时,一个核心的原则是保证端口的方向与网格线保持一致,这是因为这样做能够有效降低计算过程产生的误差,并确保仿真数据的有效性。如果未能遵循这一指导原则,可能会引发未知的计算问题,进而导致仿真结果失去可靠性。 在CST软件配置离散端口,通常需要借助“Pick Points”这一功能。通过选择“Pick Edge Center”选项,端口将被设定在模型边缘的心位置上。然而,这种做法并不总是能够确保端口与网格线保持平行。在某些特定情形下,模型的几何构造可能不允许直接选取一个与网格线平行的边作为端口的安装位置。 为了克服这一挑战,可以采用多种不同的策略。如果模型本身已经包含一条与馈电口平行的边,那么可以直接利用这条边来建立端口,此时CST软件会自动调整端口使其与网格线对齐。另一种可选的方法是,当模型不具备现成的平行边时,用户可以手动构建一个几何结构,比如一个立方体,并使其边缘与馈电口平行。通过这种方式,新建立的几何结构的边缘就可以作为端口的位置,从而确保端口与网格线的平行关系。 在实施上述操作时,必须关注端口尺寸的合理性和物理意义的一致性。端口的尺寸应当依据实际天线馈电部分的尺寸进行适当调整,过大的端口或...
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 【使用TensorFlow进行图像识别】 图像识别作为计算机视觉领域的关键任务之一,其核心在于通过算法解析和理解图像所包含的信息。在此资源,我们将集探讨如何借助功能强大的深度学习框架TensorFlow来执行手写数字识别。手写数字识别构成了众多实际应用的基础,例如自动支票处理、光学字符识别(OCR)等场景。 TensorFlow是由Google创建的一个开源库,它主要用于数值运算和机器学习,尤其在深度学习方面表现卓越。其核心优势在于可以构建并训练复杂的神经网络架构,并且在多种硬件环境实现高效执行,涵盖CPU和GPU平台。 在此实践项目,我们将运用TensorFlow来构建一个卷积神经网络(CNN)模型,这种架构是处理图像数据的理想选择。CNNs通过模仿人脑视觉皮层的运作机制,能够自主地提取图像的关键特征,进而达成识别目标。在手写数字识别的特定情境下,这些特征可能涉及笔画的几何形态、走向以及相互间的连接模式。 对于CNN的基础结构,我们需要具备相应的认知,其通常由卷积层、池化层、全连接层以及激活函数等部分组成。卷积层借助滤波器(亦称卷积核)对图像进行扫描,以捕捉局部特征;池化层则用于降低数据维度,同时保留核心信息;全连接层将特征向量映射至各类别的概率分布;而激活函数如ReLU则通过引入非线性元素,使模型能够学习更为复杂的模式。 在此案例,建议采用MNIST数据集,这是一个广泛用于手写数字识别的标准测试集。该数据集包含60,000个训练样本和10,000个测试样本,每个样本均为28x28像素的灰度图像,代表0到9这十个数字的某一个。为了训练模型,必须首先加载数据,并...

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧