`
hereson2
  • 浏览: 452156 次
  • 性别: 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,...

    基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip

    基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip

    基于python实现树莓派和传感器的植物生长环境评估信息系统

    【作品名称】:基于python实现树莓派和传感器的植物生长环境评估信息系统 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于python实现树莓派和传感器的植物生长环境评估信息系统

    优质资源,Yearning Mysql SQL审核平台

    Yearning Mysql SQL审核平台(使用go语言)

    c语言课程设计-职工资源管理系统.rar

    void displayMenu() { printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); printf("+ 职工资源管理系统 +\n"); printf("+ +\n"); printf("+ 1. 录入职工信息 +\n"); printf("+ 2. 显示全部职工信息 +\n"); printf("+ 3. 根据工号查询

    华为OD机试D卷 - 来自异国的客人 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    2024华为OD机试D卷 - 最长的指定瑕疵度的元音子串 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    基于nodejs电影交流网站(源码 + 说明文档)

    基于nodejs电影交流网站(源码 + 说明文档) 第二章 开发技术介绍 1 2.2.1 Nodejs技术 1 2.2.2 mysql数据库介绍 1 2.2.3 MySQL环境配置 1 2.2.4 B/S架构 2 2.2.5 Vue框架 2 第三章 系统分析 1 3.1 可行性分析 1 3.1.1 技术可行性 1 3.1.2操作可行性 1 3.1.3 经济可行性 1 3.2性能需求分析 1 3.3功能分析 2 第四章 系统设计 4 4.1功能结构 4 4.2 数据库设计 4 4.2.1 数据库E/R图 4 4.2.2 数据库表 5 第五章 系统功能实现 11 5.1系统功能模块 11 5.2后台登录模块 12 5.2.1管理员功能 13 5.2.2 用户功能 15 第六章 系统测试 16

    setuptools-0.9.8.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-23.2.1.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-10.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    App工具查看md5、公钥等信息

    App工具查看md5、公钥等信息

    2024华为OD机试D卷 - 高效的任务规划 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    基于co-revDSD方法的计算程序

    基于co-revDSD方法的计算程序

    setuptools-54.0.0-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    课程设计 基于FPGA的电子表源码+全部资料齐全.zip

    【资源说明】 课程设计 基于FPGA的电子表源码+全部资料齐全.zip课程设计 基于FPGA的电子表源码+全部资料齐全.zip 【备注】 1、该项目是高分课程设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    Fig0309.tif

    Fig0309.tif

    setuptools-5.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

Global site tag (gtag.js) - Google Analytics