`
hereson2
  • 浏览: 451247 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何从 Visual Basic 中调用 GetNetworkParams / GetAdapter

F# 
阅读更多
   1. 启动一个新的 Visual Basic 标准 EXE 工程。 默认情况下会创建 Form 1。
   2. 在 项目 菜单中上, 单击 删除 Form 1 。
   3. 在 项目 菜单中上, 单击 添加模块 。 默认情况下会创建 Module 1。
   4. 将以下代码粘贴到 Module 1 的通用声明部分中:

      Public Const MAX_HOSTNAME_LEN = 132
      Public Const MAX_DOMAIN_NAME_LEN = 132
      Public Const MAX_SCOPE_ID_LEN = 260
      Public Const MAX_ADAPTER_NAME_LENGTH = 260
      Public Const MAX_ADAPTER_ADDRESS_LENGTH = 8
      Public Const MAX_ADAPTER_DESCRIPTION_LENGTH = 132
      Public Const ERROR_BUFFER_OVERFLOW = 111
      Public Const MIB_IF_TYPE_ETHERNET = 6
      Public Const MIB_IF_TYPE_TOKENRING = 9
      Public Const MIB_IF_TYPE_FDDI = 15
      Public Const MIB_IF_TYPE_PPP = 23
      Public Const MIB_IF_TYPE_LOOPBACK = 24
      Public Const MIB_IF_TYPE_SLIP = 28

      Type IP_ADDR_STRING
                  Next As Long
                  IpAddress As String * 16
                  IpMask As String * 16
                  Context As Long
      End Type

      Type IP_ADAPTER_INFO
                  Next As Long
                  ComboIndex As Long
                  AdapterName As String * MAX_ADAPTER_NAME_LENGTH
                  Description As String * MAX_ADAPTER_DESCRIPTION_LENGTH
                  AddressLength As Long
                  Address(MAX_ADAPTER_ADDRESS_LENGTH - 1) As Byte
                  Index As Long
                  Type As Long
                  DhcpEnabled As Long
                  CurrentIpAddress As Long
                  IpAddressList As IP_ADDR_STRING
                  GatewayList As IP_ADDR_STRING
                  DhcpServer As IP_ADDR_STRING
                  HaveWins As Byte
                  PrimaryWinsServer As IP_ADDR_STRING
                  SecondaryWinsServer As IP_ADDR_STRING
                  LeaseObtained As Long
                  LeaseExpires As Long
      End Type

      Type FIXED_INFO
                  HostName As String * MAX_HOSTNAME_LEN
                  DomainName As String * MAX_DOMAIN_NAME_LEN
                  CurrentDnsServer As Long
                  DnsServerList As IP_ADDR_STRING
                  NodeType As Long
                  ScopeId  As String * MAX_SCOPE_ID_LEN
                  EnableRouting As Long
                  EnableProxy As Long
                  EnableDns As Long
      End Type

      Public Declare Function GetNetworkParams Lib "IPHlpApi.dll" _
             (FixedInfo As Any, pOutBufLen As Long) As Long
      Public Declare Function GetAdaptersInfo Lib "IPHlpApi.dll" _
             (IpAdapterInfo 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)

      Sub main()
          Dim error As Long
          Dim FixedInfoSize As Long
          Dim AdapterInfoSize As Long
          Dim i As Integer
          Dim PhysicalAddress  As String
          Dim NewTime As Date
          Dim AdapterInfo As IP_ADAPTER_INFO
          Dim AddrStr As IP_ADDR_STRING
          Dim FixedInfo As FIXED_INFO
          Dim Buffer As IP_ADDR_STRING
          Dim pAddrStr As Long
          Dim pAdapt As Long
          Dim Buffer2 As IP_ADAPTER_INFO
          Dim FixedInfoBuffer() As Byte
          Dim AdapterInfoBuffer() As Byte
         
          ' Get the main IP configuration information for this machine
          ' using a FIXED_INFO structure.
          FixedInfoSize = 0
          error = GetNetworkParams(ByVal 0&, FixedInfoSize)
          If error <> 0 Then
              If error <> ERROR_BUFFER_OVERFLOW Then
                 MsgBox "GetNetworkParams sizing failed with error " & error
                 Exit Sub
              End If
          End If
          ReDim FixedInfoBuffer(FixedInfoSize - 1)
         
          error = GetNetworkParams(FixedInfoBuffer(0), FixedInfoSize)
          If error = 0 Then
                  CopyMemory FixedInfo, FixedInfoBuffer(0), FixedInfoSize
                  MsgBox "Host Name:  " & FixedInfo.HostName
                  MsgBox "DNS Servers:  " & FixedInfo.DnsServerList.IpAddress
                  pAddrStr = FixedInfo.DnsServerList.Next
                  Do While pAddrStr <> 0
                        CopyMemory Buffer, ByVal pAddrStr, LenB(Buffer)
                        MsgBox "DNS Servers:  " & Buffer.IpAddress
                        pAddrStr = Buffer.Next
                  Loop
                 
                  Select Case FixedInfo.NodeType
                             Case 1
                                        MsgBox "Node type: Broadcast"
                             Case 2
                                        MsgBox "Node type: Peer to peer"
                             Case 4
                                        MsgBox "Node type: Mixed"
                             Case 8
                                        MsgBox "Node type: Hybrid"
                             Case Else
                                        MsgBox "Unknown node type"
                  End Select
                 
                  MsgBox "NetBIOS Scope ID:  " & FixedInfo.ScopeId
                  If FixedInfo.EnableRouting Then
                             MsgBox "IP Routing Enabled "
                  Else
                             MsgBox "IP Routing not enabled"
                  End If
                  If FixedInfo.EnableProxy Then
                             MsgBox "WINS Proxy Enabled "
                  Else
                             MsgBox "WINS Proxy not Enabled "
                  End If
                  If FixedInfo.EnableDns Then
                            MsgBox "NetBIOS Resolution Uses DNS "
                  Else
                            MsgBox "NetBIOS Resolution Does not use DNS  "
                  End If
          Else
                  MsgBox "GetNetworkParams failed with error " & error
                  Exit Sub
          End If
         
          ' Enumerate all of the adapter specific information using the
          ' IP_ADAPTER_INFO structure.
          ' Note:  IP_ADAPTER_INFO contains a linked list of adapter entries.
         
          AdapterInfoSize = 0
          error = GetAdaptersInfo(ByVal 0&, AdapterInfoSize)
          If error <> 0 Then
              If error <> ERROR_BUFFER_OVERFLOW Then
                 MsgBox "GetAdaptersInfo sizing failed with error " & error
                 Exit Sub
              End If
          End If
          ReDim AdapterInfoBuffer(AdapterInfoSize - 1)

          ' Get actual adapter information
          error = GetAdaptersInfo(AdapterInfoBuffer(0), AdapterInfoSize)
          If error <> 0 Then
             MsgBox "GetAdaptersInfo failed with error " & error
             Exit Sub
          End If
        
          ' Allocate memory
           CopyMemory AdapterInfo, AdapterInfoBuffer(0), AdapterInfoSize
          pAdapt = AdapterInfo.Next

          Do
           CopyMemory Buffer2, AdapterInfo, AdapterInfoSize
             Select Case Buffer2.Type
                    Case MIB_IF_TYPE_ETHERNET
                         MsgBox "Adapter name: Ethernet adapter "
                    Case MIB_IF_TYPE_TOKENRING
                         MsgBox "Adapter name: Token Ring adapter "
                    Case MIB_IF_TYPE_FDDI
                         MsgBox "Adapter name: FDDI adapter "
                    Case MIB_IF_TYPE_PPP
                         MsgBox "Adapter name: PPP adapter"
                    Case MIB_IF_TYPE_LOOPBACK
                         MsgBox "Adapter name: Loopback adapter "
                    Case MIB_IF_TYPE_SLIP
                         MsgBox "Adapter name: Slip adapter "
                    Case Else
                         MsgBox "Adapter name: Other adapter "
             End Select
             MsgBox "AdapterDescription: " & Buffer2.Description

             PhysicalAddress = ""
             For i = 0 To Buffer2.AddressLength - 1
                 PhysicalAddress = PhysicalAddress & Hex(Buffer2.Address(i))
                 If i < Buffer2.AddressLength - 1 Then
                    PhysicalAddress = PhysicalAddress & "-"
                 End If
             Next
             MsgBox "Physical Address: " & PhysicalAddress
         
             If Buffer2.DhcpEnabled Then
                MsgBox "DHCP Enabled "
             Else
                MsgBox "DHCP disabled"
             End If

             MsgBox "IP Address: " & Buffer2.IpAddressList.IpAddress
             MsgBox "Subnet Mask: " & Buffer2.IpAddressList.IpMask
             pAddrStr = Buffer2.IpAddressList.Next
             Do While pAddrStr <> 0
                CopyMemory Buffer, Buffer2.IpAddressList, LenB(Buffer)
                MsgBox "IP Address: " & Buffer.IpAddress
                MsgBox "Subnet Mask: " & Buffer.IpMask
                pAddrStr = Buffer.Next
                If pAddrStr <> 0 Then
                   CopyMemory Buffer2.IpAddressList, ByVal pAddrStr, _
                              LenB(Buffer2.IpAddressList)
                End If
             Loop
         
             MsgBox "Default Gateway: " & Buffer2.GatewayList.IpAddress
             pAddrStr = Buffer2.GatewayList.Next
             Do While pAddrStr <> 0
                CopyMemory Buffer, Buffer2.GatewayList, LenB(Buffer)
                MsgBox "IP Address: " & Buffer.IpAddress
                pAddrStr = Buffer.Next
                If pAddrStr <> 0 Then
                   CopyMemory Buffer2.GatewayList, ByVal pAddrStr, _
                              LenB(Buffer2.GatewayList)
                End If
             Loop

             MsgBox "DHCP Server: " & Buffer2.DhcpServer.IpAddress
             MsgBox "Primary WINS Server: " & _
                    Buffer2.PrimaryWinsServer.IpAddress
             MsgBox "Secondary WINS Server: " & _
                    Buffer2.SecondaryWinsServer.IpAddress

             ' Display time.
             NewTime = DateAdd("s", Buffer2.LeaseObtained, #1/1/1970#)
             MsgBox "Lease Obtained: " & _
                    CStr(Format(NewTime, "dddd, mmm d hh:mm:ss yyyy"))
          
             NewTime = DateAdd("s", Buffer2.LeaseExpires, #1/1/1970#)
             MsgBox "Lease Expires :  " & _
                    CStr(Format(NewTime, "dddd, mmm d hh:mm:ss yyyy"))
             pAdapt = Buffer2.Next
             If pAdapt <> 0 Then
                 CopyMemory AdapterInfo, ByVal pAdapt, AdapterInfoSize
              End If
            Loop Until pAdapt = 0
      End Sub
     

   5. 按 F 5 键运行该项目,请单击每个消息框将显示并注意结果上的 确定 。
分享到:
评论

相关推荐

    获取本地计算机的主机信息

    获取本地计算机的主机信息 获取本地计算机的主机信息 获取本地计算机的主机信息 获取本地计算机的主机信息

    易语言取网卡信息

    易语言取网卡信息源码,取网卡信息,获取网络适配器信息,子程序1,GetAdaptersInfo1,GetAdaptersInfo,RtlMoveMemory1,RtlMoveMemory6,RtlMoveMemory5,RtlMoveMemory2,RtlMoveMemory3,RtlMoveMemory4,GetNetworkParams1,...

    易语言网络通信API

    易语言网络通信API源码,网络通信API,取主机名,转换为主机名,转换为IP地址,通信测试,GetNetworkParams,LocalAlloc,LocalFree,WSAStartup,WSACleanup,inet_addr,gethostbyaddr,CopyMemory_int2hostent,gethostbyname,...

    基于matlab实现V2G系统simulink仿真图以及电动汽车充电和放电图.rar

    基于matlab实现V2G系统simulink仿真图以及电动汽车充电和放电图.rar

    共创在线考试系统(JSP+SERVLET)130223.rar

    共创在线考试系统(JSP+SERVLET)130223.rar,这是一个针对计算机专业学生的JSP源码资料包,旨在帮助学生更好地理解和掌握Java Web开发技术。该资料包包含了一个基于JSP和Servlet技术的在线考试系统,具有以下特点:功能齐全:该系统包括了在线考试、成绩查询、试题管理、用户管理等多个模块,能够满足学生进行在线考试的需求。界面友好:系统采用了简洁明了的界面设计,使得用户能够快速上手,方便地进行操作。代码规范:源码遵循Java编程规范,结构清晰,注释详细,便于学生学习和理解。可扩展性强:系统采用了模块化的设计思路,可以根据需要进行功能的扩展和修改。数据库支持:系统使用了MySQL数据库进行数据存储,可以方便地进行数据的增删改查操作。通过学习这个JSP源码资料包,学生可以掌握JSP和Servlet的基本用法,了解Java Web开发的基本流程,提高自己的编程能力。同时,该系统还可以作为学生课程设计或者毕业设计的参考项目,帮助他们完成学业任务。总之,这个共创在线考试系统(JSP+SERVLET)130223.rar资料包对于计算机专业的学生来说,是一个非常有价值的学习资

    医药集团能源集团汽车集团大型集团战略规划顶层战略设计方案PPT(4份)

    医药集团能源集团汽车集团大型集团战略规划顶层战略设计方案PPT(4份)

    基于matlab实现非常齐全的wsn定位matlaB仿真程序.rar

    基于matlab实现非常齐全的wsn定位matlaB仿真程序.rar

    matlab GPS与捷联惯导的组合导航程序,可以运行.rar

    matlab GPS与捷联惯导的组合导航程序,可以运行.rar

    3D模型009,可用于建模、GIS、BIM、CIM学习

    3D模型009,可用于建模、GIS、BIM、CIM学习

    大一C++作业,功能完善的学生成绩管理系统 支持信息的增删改补,虚拟信息生成,排序,硬盘数据的写入与读取.zip

    大一C++作业,功能完善的学生成绩管理系统 支持信息的增删改补,虚拟信息生成,排序,硬盘数据的写入与读取.zip

    毕业设计:基于SSM的mysql-软件缺陷管理系统(源码 + 数据库 + 说明文档)

    毕业设计:基于SSM的mysql_软件缺陷管理系统(源码 + 数据库 + 说明文档) 第2章 可行性分析 3 2.1技术的可行性 3 2.2经济的可行性 3 2.3操作可行性 4 2.4法律的可行性 4 第3章 需求分析 5 3.1开发工具需求 5 3.1.1开发语言和工具 5 3.1.2基于B/S结构开发 5 3.1.3 JAVA语言简介 5 3.1.4 JavaScript技术 6 3.1.5 MySQL数据库 6 3.1.7软硬件需求 6 3.2 系统需求 6 第4章 总体设计 8 4.1 系统模块总体设计 8 4.2 数据库设计 10 4.2.1 数据分析 10 4.2.2 数据库的详细设计 10 4.3 本章小结 12 第5章 详细设计与实现 13 5.1 管理员管理 13 5.1.1 管理员登录管理 13 5.1.2 欢迎页 13 5.1.3 项目经理管理 14 5.1.4 员工管理 15 5.1.5 用户登录日志管理 15 5.1.6 个人信息管理 16 5.2 项目经理管理 17 5.2.1 项目经理登录 17 5.2.2 项目管理 18 5.3 调试员端 1

    大型集团企业财务共享业财一体化应用平台建设方案.pptx

    大型集团企业财务共享业财一体化应用平台建设方案.pptx

    银行智能化数据安全分类分级实践方案.pdf

    银行智能化数据安全分类分级实践方案.pdf

    node-v6.10.1.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    知乎小程序算法.zip

    知乎小程序算法.zip

    基于嵌入式AI的人脸识别课堂签到系统.zip

    优秀源码设计,详情请查看资源源码内容

    基于matlab实现文档+程序边缘计算任务卸载与资源调度的算法,是论文的源代码,具有价值.rar

    基于matlab实现文档+程序边缘计算任务卸载与资源调度的算法,是论文的源代码,具有价值.rar

    毕业设计:基于SSM的mysql-软件学院互助答疑平台(源码 + 数据库 + 说明文档)

    毕业设计:基于SSM的mysql_软件学院互助答疑平台(源码 + 数据库 + 说明文档) 2 开发技术简介 13 2.1 基于B/S结构开发 13 2.2 JSP简介 13 2.3 MySQL数据库 13 2.4 JDBC 13 2.5 SSM框架 14 3 需求分析 14 3.1 需求分析 14 3.2 可行性分析 15 3.2.1 经济可行性 15 3.2.2 技术可行性 15 3.2.3 操作可行性 16 3.3 非功能需求分析 16 4 系统设计 17 4.1 数据库表设计 17 4.2 功能设计 18 5 系统详细设计 18 5.1 用户登录 18 5.2 问题发布 19 5.3 回答提问 20 5.4 用户资料 20 5.5 热门回答 21 5.6 最新回答 21 6 系统测试 22 6.1 调试目的 22 6.2 调试的主要内容 23 6.3 调试案例 23 6.4 测试方法 23 6.5 测试的重要性 24 6.6 不登陆测试 25 6.7 性能测试 25

    基于JSP技术的猎头公司管理软件的设计和实现-内部事务部分(源代码+论文).rar

    这个资料包名为"基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分(源代码+论文).rar",是一个针对计算机专业学习者或开发者提供的实用资源。它涵盖了一个以Java Server Pages (JSP)技术为基础开发的猎头公司管理软件项目,专注于公司的内部事务处理。该软件旨在简化猎头公司的工作流程,提高工作效率,并使得管理工作更加系统化和自动化。资料包中包含了完整的源代码,这意味着用户可以直接查看、修改和部署这些代码来适应自己的需求。源代码的开放性为用户提供了学习和自定义的巨大空间,可以深入理解JSP技术在实际项目中的应用,以及如何结合数据库、前端页面设计和后端逻辑控制来构建一个完整的Web应用程序。除了源代码之外,资料包还附带了一篇论文,这篇论文详细阐述了软件的设计理念、系统架构、功能模块划分、关键技术点以及实现过程等。对于学生或研究者来说,这篇论文不仅提供了技术上的指导,还展示了如何将理论知识转化为实践操作的过程,具有一定的学术价值和参考意义。整体而言,这个资料包是计算机专业学生、软件开发者或对JSP技术感兴趣的人士宝贵的学习资源。无论是作为教学案例、课程项目,还是实际

    node-v7.10.1-linux-s390x.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics