【VB声明】
  Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long【别名】
  GetComputerNameA【说明】
  取得这台计算机的名称 【返回值】
  Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError 【备注】
  也许你会发现,MAX_COMPUTERNAME_LENGTH常数在vb自带的api文本查看器中找不到。的确,我也没有找到。但我有一个工具:Listapi,这个常数在它那里可以找到【参数表】
  lpBuffer -------  String,随同计算机名载入的字串缓冲区  nSize ----------  Long,缓冲区的长度。这个变量随同返回计算机名的实际长度载入

解决方案 »

  1.   

    Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
      

  2.   

    GetComputerName VB声明 
    Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long 
    说明 
    取得这台计算机的名称 
    返回值 
    Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError 
    参数表 
    参数 类型及说明 
    lpBuffer String,随同计算机名载入的字串缓冲区 
    nSize Long,缓冲区的长度。这个变量随同返回计算机名的实际长度载入 
    注解 
    注意nSize参数并不是按值传递的。参考api32.txt,了解MAX_COMPUTER_NAME常数的值
     
    示例 
    Dim s$
    s$ = String$(MAX_COMPUTERNAME_LENGTH+1,0)
    Dim dl&
    Dim sz&
    sz& = MAX_COMPUTERNAME_LENGTH+1
    dl& = GetComputerName(s$, sz) 
    其他 
    也许你会发现,MAX_COMPUTERNAME_LENGTH常数在vb自带的api文本查看器中找不到。的确,我也没有找到。但我有一个工具:Listapi,这个常数在它那里可以找到 
      

  3.   

    Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
    '例子:Private Sub Command1_Click()
    MsgBox (MachineName)
    End SubPublic Function MachineName() As String
    Dim sBuffer As String * 255If GetComputerName(sBuffer, 255&) <> 0 Then
        MachineName = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
    Else
        MachineName = "(未知)"
    End If
    End Function
      

  4.   

    Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long 
    '*********************************************************
    '* 名称:ComputerName
    '* 功能:返回计算机名称
    '* 用法:
    '*********************************************************
    Public Function ComputerName() As String
        Dim l1 As String
        Dim l2 As Long
        Dim l3 As Long
        l2 = 255
        l1 = String$(l2, " ")
        l3 = GetComputerName(l1, l2)
        ComputerName = ""
        If l3 <> 0 Then
            ComputerName = Left(l1, l2)
        End If
    End Function
      

  5.   

    thanks lihonggen0(用VB)及所有的朋友,但是我刚刚注册,我不晓得怎样给分
      

  6.   

    用记事本写入
    VERSION 5.00
    Begin VB.Form Form1 
       BorderStyle     =   1  'Fixed Single
       Caption         =   "取得主机名&IP地址"
       ClientHeight    =   1770
       ClientLeft      =   45
       ClientTop       =   330
       ClientWidth     =   4515
       LinkTopic       =   "Form1"
       MaxButton       =   0   'False
       MinButton       =   0   'False
       ScaleHeight     =   1770
       ScaleWidth      =   4515
       StartUpPosition =   2  '屏幕中心
       Begin VB.CommandButton Command2 
          Caption         =   "退出"
          Height          =   375
          Left            =   2970
          TabIndex        =   5
          Top             =   1200
          Width           =   975
       End
       Begin VB.CommandButton Command1 
          Caption         =   "取得主机名及IP地址"
          Height          =   375
          Left            =   570
          TabIndex        =   4
          Top             =   1200
          Width           =   1815
       End
       Begin VB.TextBox Text2 
          Height          =   270
          Left            =   1680
          TabIndex        =   3
          Top             =   720
          Width           =   2415
       End
       Begin VB.TextBox Text1 
          Height          =   270
          Left            =   1680
          TabIndex        =   2
          Top             =   240
          Width           =   2415
       End
       Begin VB.Label Label2 
          Caption         =   "IP地址:"
          Height          =   255
          Left            =   240
          TabIndex        =   1
          Top             =   720
          Width           =   1215
       End
       Begin VB.Label Label1 
          Caption         =   "主机名:"
          Height          =   255
          Left            =   240
          TabIndex        =   0
          Top             =   240
          Width           =   1215
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Private Sub Command1_Click()
       Text1 = GetIPHostName()
       Text2 = GetIPAddress()
    End SubPrivate Sub Command2_Click()
      End
    End Sub
    保存为form1.frm
    Type=Exe
    Form=Form1.frm
    Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINDOWS\SYSTEM\StdOle2.Tlb#OLE Automation
    Module=Module1; Module1.bas
    IconForm="Form1"
    Startup="Form1"
    HelpFile=""
    Title="GetHost_IP"
    ExeName32="GetHost_IP.exe"
    Command32=""
    Name="工程1"
    HelpContextID="0"
    CompatibleMode="0"
    MajorVer=1
    MinorVer=0
    RevisionVer=0
    AutoIncrementVer=0
    ServerSupportFiles=0
    VersionCompanyName="twen"
    CompilationType=0
    OptimizationType=0
    FavorPentiumPro(tm)=0
    CodeViewDebugInfo=0
    NoAliasing=0
    BoundsCheck=0
    OverflowCheck=0
    FlPointCheck=0
    FDIVCheck=0
    UnroundedFP=0
    StartMode=0
    Unattended=0
    Retained=0
    ThreadPerObject=0
    MaxNumberOfThreads=1
    保存为gethost&IP.vbp
    Attribute VB_Name = "Module1"
    Option ExplicitPublic Const MAX_WSADescription = 256
    Public Const MAX_WSASYSStatus = 128
    Public Const ERROR_SUCCESS       As Long = 0
    Public Const WS_VERSION_REQD     As Long = &H101
    Public Const WS_VERSION_MAJOR    As Long = WS_VERSION_REQD \ &H100 And &HFF&
    Public Const WS_VERSION_MINOR    As Long = WS_VERSION_REQD And &HFF&
    Public Const MIN_SOCKETS_REQD    As Long = 1
    Public Const SOCKET_ERROR        As Long = -1Public Type HOSTENT
       hName      As Long
       hAliases   As Long
       hAddrType  As Integer
       hLen       As Integer
       hAddrList  As Long
    End TypePublic Type WSADATA
       wVersion      As Integer
       wHighVersion  As Integer
       szDescription(0 To MAX_WSADescription)   As Byte
       szSystemStatus(0 To MAX_WSASYSStatus)    As Byte
       wMaxSockets   As Integer
       wMaxUDPDG     As Integer
       dwVendorInfo  As Long
    End Type
    Public Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As LongPublic Declare Function WSAStartup Lib "WSOCK32.DLL" _
       (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
       
    Public Declare Function WSACleanup Lib "WSOCK32.DLL" () As LongPublic Declare Function gethostname Lib "WSOCK32.DLL" _
       (ByVal szHost As String, ByVal dwHostLen As Long) As Long
       
    Public Declare Function gethostbyname Lib "WSOCK32.DLL" _
       (ByVal szHost As String) As Long
       
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
       (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
    Public Function GetIPAddress() As String   Dim sHostName    As String * 256
       Dim lpHost    As Long
       Dim HOST      As HOSTENT
       Dim dwIPAddr  As Long
       Dim tmpIPAddr() As Byte
       Dim i         As Integer
       Dim sIPAddr  As String
       
       If Not SocketsInitialize() Then
          GetIPAddress = ""
          Exit Function
       End If
        
      'gethostname returns the name of the local host into
      'the buffer specified by the name parameter. The host
      'name is returned as a null-terminated string. The
      'form of the host name is dependent on the Windows
      'Sockets provider - it can be a simple host name, or
      'it can be a fully qualified domain name. However, it
      'is guaranteed that the name returned will be successfully
      'parsed by gethostbyname and WSAAsyncGetHostByName.  'In actual application, if no local host name has been
      'configured, gethostname must succeed and return a token
      'host name that gethostbyname or WSAAsyncGetHostByName
      'can resolve.
       If gethostname(sHostName, 256) = SOCKET_ERROR Then
          GetIPAddress = ""
          MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & _
                  " has occurred. Unable to successfully get Host Name."
          SocketsCleanup
          Exit Function
       End If
        
       
      'gethostbyname returns a pointer to a HOSTENT structure
      '- a structure allocated by Windows Sockets. The HOSTENT
      'structure contains the results of a successful search
      'for the host specified in the name parameter.  'The application must never attempt to modify this
      'structure or to free any of its components. Furthermore,
      'only one copy of this structure is allocated per thread,
      'so the application should copy any information it needs
      'before issuing any other Windows Sockets function calls.  'gethostbyname function cannot resolve IP address strings
      'passed to it. Such a request is treated exactly as if an
      'unknown host name were passed. Use inet_addr to convert
      'an IP address string the string to an actual IP address,
      'then use another function, gethostbyaddr, to obtain the
      'contents of the HOSTENT structure.
       sHostName = Trim$(sHostName)
       lpHost = gethostbyname(sHostName)
        
       If lpHost = 0 Then
          GetIPAddress = ""
          MsgBox "Windows Sockets are not responding. " & _
                  "Unable to successfully get Host Name."
          SocketsCleanup
          Exit Function
       End If
        
      'to extract the returned IP address, we have to copy
      'the HOST structure and its members
       CopyMemory HOST, lpHost, Len(HOST)
       CopyMemory dwIPAddr, HOST.hAddrList, 4
       
      'create an array to hold the result
       ReDim tmpIPAddr(1 To HOST.hLen)
       CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen
       
      'and with the array, build the actual address,
      'appending a period between members
       For i = 1 To HOST.hLen
          sIPAddr = sIPAddr & tmpIPAddr(i) & "."
       Next
      
      'the routine adds a period to the end of the
      'string, so remove it here
       GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
       
       SocketsCleanup
        
    End Function
    Public Function GetIPHostName() As String    Dim sHostName As String * 256
        
        If Not SocketsInitialize() Then
            GetIPHostName = ""
            Exit Function
        End If
        
        If gethostname(sHostName, 256) = SOCKET_ERROR Then
            GetIPHostName = ""
            MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & _
                    " has occurred.  Unable to successfully get Host Name."
            SocketsCleanup
            Exit Function
        End If
        
        GetIPHostName = Left$(sHostName, InStr(sHostName, Chr(0)) - 1)
        SocketsCleanupEnd Function
    Public Function HiByte(ByVal wParam As Integer) As Byte
      
      'note: VB4-32 users should declare this function As Integer
       HiByte = (wParam And &HFF00&) \ (&H100)
     
    End Function
    Public Function LoByte(ByVal wParam As Integer) As Byte  'note: VB4-32 users should declare this function As Integer
       LoByte = wParam And &HFF&End Function
    Public Sub SocketsCleanup()    If WSACleanup() <> ERROR_SUCCESS Then
            MsgBox "Socket error occurred in Cleanup."
        End If
        
    End SubPublic Function SocketsInitialize() As Boolean   Dim WSAD As WSADATA
       Dim sLoByte As String
       Dim sHiByte As String
       
       If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then
          MsgBox "The 32-bit Windows Socket is not responding."
          SocketsInitialize = False
          Exit Function
       End If
       
       
       If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then
            MsgBox "This application requires a minimum of " & _
                    CStr(MIN_SOCKETS_REQD) & " supported sockets."
            
            SocketsInitialize = False
            Exit Function
        End If
       
       
       If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or _
         (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And _
          HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then
          
          sHiByte = CStr(HiByte(WSAD.wVersion))
          sLoByte = CStr(LoByte(WSAD.wVersion))
          
          MsgBox "Sockets version " & sLoByte & "." & sHiByte & _
                 " is not supported by 32-bit Windows Sockets."
          
          SocketsInitialize = False
          Exit Function
          
       End If
        
        
      'must be OK, so lets do it
       SocketsInitialize = True
            
    End Function
    保存为Module1.bas
    见《WINDOWS网络编程VB篇》
      

  7.   

    dbcontrols(泰山__帮助你使我感到快乐.)正解