取得Computer Name, OS的版本 
 
 Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128      '  Maintenance string for PSS usage
End TypePrivate Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
        (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias _
        "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As LongPrivate Sub Command1_Click()
Dim len5 As Long, aa As Long
Dim cmprName As String
Dim osver As OSVERSIONINFO'取得Computer Name
cmprName = String(255, 0)
len5 = 256
aa = GetComputerName(cmprName, len5)
cmprName = Left(cmprName, InStr(1, cmprName, Chr(0)) - 1)
Debug.Print "Computer Name = "; cmprName'取得OS的版本
osver.dwOSVersionInfoSize = Len(osver)
aa = GetVersionEx(osver)
Debug.Print "MajorVersion "; osver.dwMajorVersion
Debug.Print "MinorVersion "; osver.dwMinorVersion
Select Case osver.dwPlatformId
Case 0
   Debug.Print "Window 3.1"
Case 1
   Debug.Print "Win95"
Case 2
   Debug.Print "WinNT"
End Select
End Sub 
   
 
  
 

解决方案 »

  1.   

    The Windows Sockets gethostname function returns the standard host name for the local machine.int gethostname (
      char FAR * name,  
      int namelen       
    );
     
      

  2.   

    二个文本框,二个按钮。
    可以得到网站的ip,或某些ip的名称。
    文本框为空的时候,是本机的。
    Option Explicit
    Private Const WS_VERSION_REQD = &H101
    Private Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&
    Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&
    Private Const MIN_SOCKETS_REQD = 1
    Private Const SOCKET_ERROR = -1
    Private Const WSADescription_Len = 256
    Private Const WSASYS_Status_Len = 128Private Type HOSTENT
       hname As Long
       hAliases As Long
       hAddrType As Integer
       hLength As Integer
       hAddrList As Long
    End TypePrivate Type WSADATA
       wversion As Integer
       wHighVersion As Integer
       szDescription(0 To WSADescription_Len) As Byte
       szSystemStatus(0 To WSASYS_Status_Len) As Byte
       iMaxSockets As Integer
       iMaxUdpDg As Integer
       lpszVendorInfo As Long
    End Type
    Private Declare Function gethostbyaddr _
                    Lib "WSOCK32.DLL" (addr As Any, _
                                       ByVal byteslen As Integer, _
                                       addrtype As Integer) As LongPrivate Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As LongPrivate Declare Function WSAStartup _
                    Lib "WSOCK32.DLL" (ByVal wVersionRequired&, _
                                       lpWSAData As WSADATA) As LongPrivate Declare Function WSACleanup Lib "WSOCK32.DLL" () As LongPrivate Declare Function gethostbyname _
                    Lib "WSOCK32.DLL" (ByVal hostname$) As LongPrivate Declare Sub RtlMoveMemory _
                        Lib "KERNEL32" (hpvDest As Any, ByVal hpvSource&, ByVal cbCopy&)Function hibyte(ByVal wParam As Integer)    '获得整数的高位
       hibyte = wParam \ &H100 And &HFF&
    End FunctionFunction lobyte(ByVal wParam As Integer)    '获得整数的低位
       lobyte = wParam And &HFF&
    End Function'入口初始化
    Function SocketsInitialize()
       Dim WSAD As WSADATA
       Dim iReturn As Integer
       Dim sLowByte As String, sHighByte As String, sMsg As String
       
       'WS_VERSION_REQD = &H101 ,Dim WSAD As WSADATA
       
       '调用 WSAStartup 的地方
       iReturn = WSAStartup(WS_VERSION_REQD, WSAD)
       
       If iReturn <> 0 Then
          MsgBox "Winsock.dll 没有反应."
          End
       End If
       
       If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then
          sHighByte = Trim$(str$(hibyte(WSAD.wversion)))
          sLowByte = Trim$(str$(lobyte(WSAD.wversion)))
          sMsg = "Windows Sockets版本 " & sLowByte & "." & sHighByte
          sMsg = sMsg & " 不被winsock.dll支持 "
          MsgBox sMsg
          End
       End If
       
       If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then
          sMsg = "这个系统需要的最少Sockets数为 "
          sMsg = sMsg & Trim$(str$(MIN_SOCKETS_REQD))
          MsgBox sMsg
          End
       End If
       
    End FunctionSub SocketsCleanup()
       Dim lReturn As Long
       
       '调用 WSACleanup 的地方
       lReturn = WSACleanup()
       
       If lReturn <> 0 Then
          MsgBox "Socket错误 " & Trim$(str$(lReturn)) & " occurred in Cleanup "
          End
       End If
    End Sub
    Sub Form_Load()
        '初始化Socket
        SocketsInitialize
    End Sub
    'vb中从域名得到IP及从IP得到域名下Private Sub Form_Unload(Cancel As Integer)
        '清除Socket
        SocketsCleanup
    End Sub
    Private Function getip(name As String) As String
       Dim hostent_addr As Long
       Dim host As HOSTENT
       Dim hostip_addr As Long
       Dim temp_ip_address() As Byte
       Dim i As Integer
       Dim ip_address As String
       
       '调用 gethostbyname 的地方
       hostent_addr = gethostbyname(name)
       
       If hostent_addr = 0 Then
          getip = ""                     '主机名不能被解释
          Exit Function
       End If
       
       '调用 RtlMoveMemory 的地方
       RtlMoveMemory host, hostent_addr, LenB(host)
       RtlMoveMemory hostip_addr, host.hAddrList, 4
       
       '调用 RtlMoveMemory 的地方
       ReDim temp_ip_address(1 To host.hLength)
       RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength
       
       For i = 1 To host.hLength
          ip_address = ip_address & temp_ip_address(i) & "."
       Next
       ip_address = Mid$(ip_address, 1, Len(ip_address) - 1)
       
       getip = ip_addressEnd FunctionPrivate Sub Command1_click()
        Dim str As String
        str = getip(Text1.Text)
        If str = "" Then
            Text2.Text = "主机名不能被解释"
        Else
            Text2.Text = str
        End If
    End Sub
    Private Function getname(addrstr As String) As String
        Dim hostent_addr As Long
        Dim host As HOSTENT
        Dim addr(0 To 50) As Byte
        Dim addrs As String
        Dim hname(1 To 50) As Byte
        Dim str As String
        Dim i As Integer, j As Integer
        Dim temp_int As Integer
        Dim byt As Byte
        str = Trim$(addrstr)
        i = 0
        j = 0
        Do
            temp_int = 0
            i = i + 1
            Do While Mid$(str, i, 1) >= "0" And Mid$(str, i, 1) <= "9" And i <= Len(str)
                temp_int = temp_int * 10 + Mid$(str, i, 1)
                i = i + 1
            Loop
            If temp_int <= 255 Then
                addr(j) = temp_int
                j = j + 1
            End If
        
        Loop Until Mid$(str, i, 1) <> "." Or i > Len(str) Or temp_int > 255
        If temp_int > 255 Then
            getname = "地址非法"
            Exit Function
        End If
        
    '调用 gethostbyaddr 的地方
        hostent_addr = gethostbyaddr(addr(0), j, 2)
        If hostent_addr = 0 Then
            getname = "此地址无法解析"
            Exit Function
        End If
        
        '调用 RtlMoveMemory 的地方
        RtlMoveMemory host, hostent_addr, LenB(host)
        RtlMoveMemory hname(1), host.hname, 50
        j = 51
        For i = 1 To 50
            If hname(i) = 0 Then
                j = i
            End If
            If i >= j Then
                hname(i) = 32
            End If
        Next i
        getname = Trim$(StrConv(hname, vbUnicode))
    End Function
    Private Sub Command2_Click()
        Dim name As String
        name = getname(Text2.Text)
        If name = "" Then
            name = "此地址没有域名"
        End If
        Text1.Text = name
    End Sub