⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.frm

📁 电子书“Visual Basic 6 网络编程实例教程.rar”
💻 FRM
字号:
VERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Begin VB.Form Form1 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "网络接口表"
   ClientHeight    =   5910
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   8430
   Icon            =   "Form1.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   5910
   ScaleWidth      =   8430
   StartUpPosition =   2  '屏幕中心
   Begin MSComctlLib.ListView LvwInterface 
      Height          =   5175
      Left            =   0
      TabIndex        =   1
      Top             =   120
      Width           =   8415
      _ExtentX        =   14843
      _ExtentY        =   9128
      LabelWrap       =   -1  'True
      HideSelection   =   -1  'True
      _Version        =   393217
      ForeColor       =   -2147483640
      BackColor       =   -2147483643
      BorderStyle     =   1
      Appearance      =   1
      NumItems        =   0
   End
   Begin VB.CommandButton CmdRun 
      Caption         =   "运行(&R)"
      Height          =   495
      Left            =   3360
      TabIndex        =   0
      Top             =   5400
      Width           =   2175
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Sub CmdRun_Click()
  Dim IPInterfaceRow As MIB_IFROW
  Dim buff() As Byte
  Dim cbRequired As Long
  Dim nStructSize As Long
  Dim nRows As Long
  Dim cnt As Long
  Dim n As Long
  Dim itmx As ListItem
  Dim tmp As String
  Call GetIfTable(ByVal 0&, cbRequired, 1)
  If cbRequired > 0 Then
    ReDim buff(0 To cbRequired - 1) As Byte
    If GetIfTable(buff(0), cbRequired, 1) = ERROR_SUCCESS Then
         '用下面的CopyMemory调用中的Lenb来保存数据
        nStructSize = LenB(IPInterfaceRow)
        '前4个字节是一个长整形,指明了表的入口
        CopyMemory nRows, buff(0), 4
         For cnt = 1 To nRows
            '移动到前面的4个字节之后,提取相应数据,
                '并将其转换为IPInterfaceRow类型
            CopyMemory IPInterfaceRow, buff(4 + (cnt - 1) * nStructSize), nStructSize
            With LvwInterface
                .ColumnHeaders.Add , , "Adapter " & CStr(cnt)
                Set itmx = .ListItems(1)
                itmx.SubItems(cnt) = TrimNull(StrConv(IPInterfaceRow.bDescr, vbUnicode))
                Set itmx = .ListItems(2)
                itmx.SubItems(cnt) = GetInetStrFromPtr(IPInterfaceRow.dwIndex)
                Select Case IPInterfaceRow.dwType
                    Case MIB_IF_TYPE_ETHERNET:    tmp = "Ethernet"
                    Case MIB_IF_TYPE_TOKENRING:   tmp = "TokenRing"
                    Case MIB_IF_TYPE_FDDI:        tmp = "FDDI"
                    Case MIB_IF_TYPE_PPP:         tmp = "Point-to-Point"
                    Case MIB_IF_TYPE_LOOPBACK:    tmp = "Loopback"
                    Case MIB_IF_TYPE_SLIP:        tmp = "Slip"
                    Case MIB_IF_TYPE_OTHER:       tmp = "Other"
                End Select
                Set itmx = .ListItems(3)
                itmx.SubItems(cnt) = IPInterfaceRow.dwType & " " & tmp
                tmp = ""
                Set itmx = .ListItems(4)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwMtu, 0)
                Set itmx = .ListItems(5)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwSpeed, 0)
                For n = 1 To IPInterfaceRow.dwPhysAddrLen
                    tmp = tmp & IPInterfaceRow.bPhysAddr(n) & " "
                Next n
                Print
                Set itmx = .ListItems(6)
                itmx.SubItems(cnt) = tmp
                tmp = ""
                For n = 1 To IPInterfaceRow.dwPhysAddrLen
                    tmp = tmp & Hex(IPInterfaceRow.bPhysAddr(n)) & " "
                Next n
                Print
                Set itmx = .ListItems(7)
                itmx.SubItems(cnt) = tmp
                tmp = ""
                Select Case IPInterfaceRow.dwAdminStatus
                    Case MIB_IF_ADMIN_STATUS_UP:      tmp = "Enabled"
                    Case MIB_IF_ADMIN_STATUS_DOWN:    tmp = "Disabled"
                    Case MIB_IF_ADMIN_STATUS_TESTING: tmp = "Testing"
                End Select
                Set itmx = .ListItems(8)
                itmx.SubItems(cnt) = IPInterfaceRow.dwAdminStatus & " " & tmp
                tmp = ""
                Select Case IPInterfaceRow.dwOperStatus
                    Case MIB_IF_OPER_STATUS_NON_OPERATIONAL:  tmp = "无操作"
                    Case MIB_IF_OPER_STATUS_UNREACHABLE:      tmp = "不能抵达"
                    Case MIB_IF_OPER_STATUS_DISCONNECTED:     tmp = "断开连接"
                    Case MIB_IF_OPER_STATUS_CONNECTING:       tmp = "正连接"
                    Case MIB_IF_OPER_STATUS_CONNECTED:        tmp = "已连接"
                    Case MIB_IF_OPER_STATUS_OPERATIONAL:      tmp = "操作的"
                End Select
                Set itmx = .ListItems(9)
                itmx.SubItems(cnt) = IPInterfaceRow.dwOperStatus & " " & tmp
                tmp = ""
                Set itmx = .ListItems(10)
                itmx.SubItems(cnt) = IPInterfaceRow.dwLastChange
                Set itmx = .ListItems(11)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwInOctets, 0)
                Set itmx = .ListItems(12)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwInUcastPkts, 0)
                Set itmx = .ListItems(13)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwInNUcastPkts, 0)
                Set itmx = .ListItems(14)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwInDiscards, 0)
                Set itmx = .ListItems(15)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwInErrors, 0)
                Set itmx = .ListItems(16)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwInUnknownProtos, 0)
                Set itmx = .ListItems(17)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwOutOctets, 0)
                Set itmx = .ListItems(18)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwOutUcastPkts, 0)
                Set itmx = .ListItems(19)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwOutNUcastPkts, 0)
                Set itmx = .ListItems(20)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwOutDiscards, 0)
                Set itmx = .ListItems(21)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwOutErrors, 0)
                Set itmx = .ListItems(22)
                itmx.SubItems(cnt) = FormatNumber(IPInterfaceRow.dwOutQLen, 0)
            End With  'Listview1
        Next cnt
    End If
    'If GetIfTable( ...
  End If
   'If cbRequired > 0
End Sub

Private Sub Form_Load()
    Dim itmx As ListItem
    LvwInterface.View = lvwReport
    LvwInterface.ColumnHeaders.Add , , "信息"
    With LvwInterface.ListItems
        Set itmx = .Add(, "bDescr", "接口描述")
        Set itmx = .Add(, , "接口索引")
        Set itmx = .Add(, , "接口类型")
        Set itmx = .Add(, , "最大传输单位")
        Set itmx = .Add(, , "接口速度bps")
        Set itmx = .Add(, , "物理地址(十进制)")
        Set itmx = .Add(, , "物理地址(十六进制)")
        Set itmx = .Add(, , "是否允许管理")
        Set itmx = .Add(, , "接口操作状态")
        Set itmx = .Add(, , "最近状态变化时间")
        Set itmx = .Add(, , "接收的数据(8个一组)")
        Set itmx = .Add(, , "接收的包(统一格式)")
        Set itmx = .Add(, , "接收的包(未统一格式)")
        Set itmx = .Add(, , "废弃的包")
        Set itmx = .Add(, , "因错误而废弃的包")
        Set itmx = .Add(, , "因未知协议而废弃的包")
        Set itmx = .Add(, , "发送的数据(8个一组)")
        Set itmx = .Add(, , "发送的包(统一格式)")
        Set itmx = .Add(, , "发送的包(未统一格式)")
        Set itmx = .Add(, , "无错误而废弃的包")
        Set itmx = .Add(, , "因错误而废弃的包")
        Set itmx = .Add(, , "输出队列长度")
    End With
End Sub

Private Function GetInetStrFromPtr(ByVal Address As Long) As String
    GetInetStrFromPtr = GetStrFromPtrA(inet_ntoa(Address))
End Function

Private Function GetStrFromPtrA(ByVal lpszA As Long) As String
    GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
    Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
End Function

Private Function TrimNull(item As String)
    Dim pos As Integer
    pos = InStr(item, Chr$(0))
    If pos Then
    TrimNull = Left$(item, pos - 1)
    Else: TrimNull = item
    End If
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -