CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

请问各位大侠获得本机的机器名的API?

楼主surprise(惊喜)2002-03-29 16:52:00 在 VB / API 提问

请问各位大侠获得本机的机器名的API? 问题点数:20、回复次数:4Top

1 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2002-03-29 16:55:50 得分 20

 
          取得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   Type  
   
  Private   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   Long  
   
  Private   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  
   
     
         
     
       
     
  Top

2 楼surprise(惊喜)回复于 2002-03-29 17:02:15 得分 0

分给你Top

3 楼public(九天十地菩萨摇头怕怕,霹雳金光雷电掌@!@)回复于 2002-03-29 17:04:39 得分 0

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

4 楼baguijin999()回复于 2002-03-29 17:06:17 得分 0

二个文本框,二个按钮。  
  可以得到网站的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   =   128  
   
  Private   Type   HOSTENT  
        hname   As   Long  
        hAliases   As   Long  
        hAddrType   As   Integer  
        hLength   As   Integer  
        hAddrList   As   Long  
  End   Type  
   
  Private   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   Long  
   
  Private   Declare   Function   WSAGetLastError   Lib   "WSOCK32.DLL"   ()   As   Long  
   
  Private   Declare   Function   WSAStartup   _  
                                  Lib   "WSOCK32.DLL"   (ByVal   wVersionRequired&,   _  
                                                                        lpWSAData   As   WSADATA)   As   Long  
   
  Private   Declare   Function   WSACleanup   Lib   "WSOCK32.DLL"   ()   As   Long  
   
  Private   Declare   Function   gethostbyname   _  
                                  Lib   "WSOCK32.DLL"   (ByVal   hostname$)   As   Long  
   
  Private   Declare   Sub   RtlMoveMemory   _  
                                          Lib   "KERNEL32"   (hpvDest   As   Any,   ByVal   hpvSource&,   ByVal   cbCopy&)  
   
  Function   hibyte(ByVal   wParam   As   Integer)         '获得整数的高位  
        hibyte   =   wParam   \   &H100   And   &HFF&  
  End   Function  
   
  Function   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   Function  
   
  Sub   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_address  
   
  End   Function  
   
  Private   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  
  Top

相关问题

  • 如何获得本机机器名?
  • 如何获得本机器的时间?
  • 如何获得本机的ip或者机器名!!!
  • 请教!vb中怎样获得本机的机器名。
  • 如何在程序中获得本机的网络ID,Ip或者机器名.
  • 如何用API获得本机的IP地址,如果本机有多个IP地址,又怎样获得?
  • 请问获得本机IP的API函数,急用!!!
  • 如何获得本机器的一些操作系统信息,例如平台版本等等?
  • 高手请帮忙,有什么函数可以获得本机的IP地址和机器名?
  • 哪个API能得到当前连接到本机的其它机器的列表?

关键词

  • 域名
  • ws
  • cmprname
  • rtlmovememory
  • hname
  • 本机
  • hostent
  • hlength
  • osver
  • longprivate

得分解答快速导航

  • 帖主:surprise
  • lihonggen0

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo