读书人

求解取得计算机名的程序。该如何处理

发布时间: 2012-02-13 17:20:26 作者: rapoo

求解取得计算机名的程序。
大家好,以下是一道高新技术考试,单击按钮,取得本地计算机名的程序,考试在即,大家可以帮我解释下吗?
Private Sub Command1_Click()
Dim Name As String, Length As Long
Length = 255
Name = String(Length, 0) '这语句是什么意思?
ZYJMod1.GetComputerName Name, Length
Name = Left(Name, Length) '这语句是什么意思?
Label1.Caption = Name
End Sub
------
急复,谢谢!

[解决办法]
第一句是填充Length长度的空字符。用于分配空间,因为要调用API。API是用C写的,用的是指针

第二句是截取Length长度的字符,以为返回的是指针,所以长度是不固定的
[解决办法]
Public Const ERROR_SUCCESS As Long = 0

Public Const MAX_DOMAIN_NAME_LEN As Long = 128

Public Const MAX_HOSTNAME_LEN As Long = 128

Public Const MAX_SCOPE_ID_LEN As Long = 256

Public Type IP_ADDRESS_STRING
IpAddr(0 To 15) As Byte
End Type

Public Type IP_MASK_STRING
IpMask(0 To 15) As Byte
End Type

Public Type IP_ADDR_STRING
dwNext As Long
IpAddress As IP_ADDRESS_STRING
IpMask As IP_MASK_STRING
dwContext As Long
End Type

Public Type FIXED_INFO
HostName(0 To (MAX_HOSTNAME_LEN + 3)) As Byte
DomainName(0 To (MAX_DOMAIN_NAME_LEN + 3)) As Byte
CurrentDnsServer As IP_ADDR_STRING
DnsServerList As IP_ADDR_STRING
NodeType As Long
ScopeId(0 To (MAX_SCOPE_ID_LEN + 3)) As Byte
EnableRouting As Long
EnableProxy As Long
EnableDns As Long
End Type

Public Declare Function GetNetworkParams Lib "iphlpapi.dll " _
(pFixedInfo As Any, pOutBufLen As Long) As Long

Public Declare Sub CopyMemory Lib "kernel32 " Alias "RtlMoveMemory " (Destination As Any, Source As Any, ByVal Length As Long)

Public szDomainName As String

Private Function GetHostName() As String
Dim buff() As Byte
Dim cbRequired As Long
Dim nStructSize As Long
Dim Info As FIXED_INFO

Call GetNetworkParams(ByVal 0&, cbRequired)
If cbRequired > 0 Then
ReDim buff(0 To cbRequired - 1) As Byte
If GetNetworkParams(buff(0), cbRequired) = ERROR_SUCCESS Then
CopyMemory Info, ByVal VarPtr(buff(0)), LenB(Info)
GetHostName = TrimNULL(StrConv(Info.HostName, vbUnicode))
szDomainName = TrimNULL(StrConv(Info.DomainName, vbUnicode))


End If
End If
End Function

Private Function TrimNULL(item As String)
Dim pos As Integer
pos = InStr(item, Chr$(0))
If pos Then
TrimNULL = Left$(item, pos - 1)
Else
TrimNULL = item
End If
End Function

Private Sub Command1_Click()
Text1.Text = GetHostName()
Text2.Text = szDomainName
End Sub

读书人网 >VB

热点推荐