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

📄 form1.frm

📁 电子书“Visual Basic 6 网络编程实例教程.rar”
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "域中的服务器及机器"
   ClientHeight    =   3870
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   4275
   Icon            =   "Form1.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   3870
   ScaleWidth      =   4275
   StartUpPosition =   2  '屏幕中心
   Begin VB.ListBox List1 
      Height          =   2580
      Left            =   840
      TabIndex        =   2
      Top             =   240
      Width           =   3015
   End
   Begin VB.ComboBox Combo1 
      Height          =   300
      Left            =   840
      TabIndex        =   1
      Text            =   "Combo1"
      Top             =   2880
      Width           =   3015
   End
   Begin VB.CommandButton Command1 
      Caption         =   "运行(&R)"
      Height          =   375
      Left            =   1680
      TabIndex        =   0
      Top             =   3360
      Width           =   1095
   End
   Begin VB.Label Label2 
      AutoSize        =   -1  'True
      BackStyle       =   0  'Transparent
      Caption         =   "类型"
      Height          =   180
      Left            =   360
      TabIndex        =   4
      Top             =   2880
      Width           =   360
   End
   Begin VB.Label Label1 
      AutoSize        =   -1  'True
      BackStyle       =   0  'Transparent
      Caption         =   "服务器"
      Height          =   180
      Left            =   240
      TabIndex        =   3
      Top             =   240
      Width           =   540
   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 Combo1_Click()
    Call GetServers(vbNullString)
End Sub

Private Sub Command1_Click()
    Call GetServers(vbNullString)
End Sub

Private Sub Form_Load()
   With Combo1
      .AddItem "所有服务器"
      .ItemData(.NewIndex) = SV_TYPE_ALL
      '指定操作系统
      .AddItem "NT/2000工作站或服务器"
      .ItemData(.NewIndex) = SV_TYPE_NT
      .AddItem "Windows 95以上的系统"
      .ItemData(.NewIndex) = SV_TYPE_WINDOWS
      .AddItem "运行工作组的Windows的服务器"
      .ItemData(.NewIndex) = SV_TYPE_WFW
      .AddItem "运行Unix的服务器"
      .ItemData(.NewIndex) = SV_TYPE_SERVER_UNIX
      .AddItem "LAN管理工作站"
      .ItemData(.NewIndex) = SV_TYPE_WORKSTATION
      .AddItem "LAN管理服务器"
      .ItemData(.NewIndex) = SV_TYPE_SERVER
      .AddItem "不是域控制器的NT/2000服务器"
      .ItemData(.NewIndex) = SV_TYPE_SERVER_NT
      .AddItem "包含浏览器的服务器"
      .ItemData(.NewIndex) = SV_TYPE_LOCAL_LIST_ONLY
      .AddItem "主域(忽略版本信息)"
      .ItemData(.NewIndex) = SV_TYPE_DOMAIN_ENUM
      .ListIndex = 0
  End With
End Sub

Private Function GetServers(sDomain As String) As Long
  '列举域中可见的指定类型的服务器
   Dim bufptr          As Long
   Dim dwEntriesread   As Long
   Dim dwTotalentries  As Long
   Dim dwResumehandle  As Long
   Dim dwServertype    As Long
   Dim se101           As SERVER_INFO_101
   Dim success         As Long
   Dim nStructSize     As Long
   Dim cnt             As Long
   nStructSize = LenB(se101)
   dwServertype = Combo1.ItemData(Combo1.ListIndex)
   List1.Clear
  '使用MAX_PREFERRED_LENGTH,以让函数为返回的数据分配足够的空间
  '调用函数列举网络中的所有机器(SV_TYPE_ALL),
  '可以通过组合掩码位来列举几种类型的服务器。
  '例如,0X00000003就是SV_TYPE_WORKSTATION(0X00000001)
  '和SV_TYPE_SERVER(0X00000002)的组合。
  '参数dwServerName必须为Null. 参数level的值(这里为101)
  '指定了函数使用的数据结构(此为SERVER_INFO_101)
  '成员domain的值为Null,以返回域中的所有的机器。
   success = NetServerEnum(0&, _
                           101, _
                           bufptr, _
                           MAX_PREFERRED_LENGTH, _
                           dwEntriesread, _
                           dwTotalentries, _
                           dwServertype, _
                           0&, _
                           dwResumehandle)
   If success = NERR_SUCCESS And _
      success <> ERROR_MORE_DATA Then
    '提取返回的数据,并添加到列表中
      For cnt = 0 To dwEntriesread - 1
        '获取数据,并将其转换为SERVER_INFO_101结构类型
         CopyMemory se101, ByVal bufptr + (nStructSize * cnt), nStructSize
        List1.AddItem GetPointerToByteStringW(se101.sv101_name) & vbTab & _
                       GetPlatformString(se101.sv101_platform_id) & " " & _
                      (se101.sv101_version_major And MAJOR_VERSION_MASK) & "." & _
                       se101.sv101_version_minor
      Next
   End If
  '释放bufptr
   Call NetApiBufferFree(bufptr)
   GetServers = dwEntriesread
End Function

Private Function GetPlatformString(ByVal dwPlatformID As Long) As String
   Select Case dwPlatformID
      Case PLATFORM_ID_DOS: GetPlatformString = "DOS"
      Case PLATFORM_ID_OS2: GetPlatformString = "Windows"
      Case PLATFORM_ID_NT:  GetPlatformString = "Windows NT"
      Case PLATFORM_ID_OSF: GetPlatformString = "OSF"
      Case PLATFORM_ID_VMS: GetPlatformString = "VMS"
   End Select
End Function

Private Function GetPointerToByteStringW(ByVal dwData As Long) As String
   Dim tmp() As Byte
   Dim tmplen As Long
   If dwData <> 0 Then
      tmplen = lstrlenW(dwData) * 2
      If tmplen <> 0 Then
         ReDim tmp(0 To (tmplen - 1)) As Byte
         CopyMemory tmp(0), ByVal dwData, tmplen
         GetPointerToByteStringW = tmp
     End If
   End If
End Function

⌨️ 快捷键说明

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