Опять локальная сеть...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Опять локальная сеть...

Сообщение Sirik » 22.07.2004 (Чт) 8:51

Как узнать имена компов в сети я знаю и использую следующий код:
Код: Выделить всё
Option Explicit

Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Declare Function NetServerEnum Lib "netapi32" (Servername As Any, ByVal Level As Long, Address As Long, ByVal prefmaxlen As Long, ServersCount As Long, Count As Long, ByVal ServerType As Long, strDomain As Any, resumehandle As Long) As Long
Private Declare Function NetApiBufferFree Lib "Netapi32.dll" (ByVal lpBuffer As Long) As Long


Private Const SV_TYPE_SERVER As Long = &H2
Private Const SV_TYPE_SQLSERVER As Long = &H4

Private Type SV_100
  platform As Long
  name As Long
End Type

Public Function GetServers(Domain As String) As String
'
    Dim Response As Long
    Dim ServersCount As Long
    Dim Count As Long
    Dim hResume As Long
    Dim Address As Long
    Dim Level As Long
    Dim prefmaxlen As Long
    Dim ServerType As Long
    Dim Buffer() As Byte
    Dim Iterator As Long
    Dim sv100 As SV_100

    Level = 100
    prefmaxlen = -1

    ServerType = SV_TYPE_SERVER
   
    Buffer = Domain & vbNullChar
    Response = NetServerEnum(ByVal 0&, Level, Address, prefmaxlen, ServersCount, Count, ServerType, Buffer(0), hResume)
   
    If Response = 0 Or Response = 234& Then
        For Iterator = 0 To ServersCount - 1
            CopyMemory sv100, ByVal Address, Len(sv100)
            GetServers = GetServers & vbLf & Pointer2StringW(sv100.name)
            Address = Address + Len(sv100)
        Next
    Else
        GetServers = "#Error"
    End If
    NetApiBufferFree Address
End Function

Private Function Pointer2StringW(ByVal Address As Long) As String
    Dim Buffer() As Byte
    Dim Count As Long
   
    Count = lstrlenW(Address) * 2
    If Count Then
        ReDim Buffer(0 To (Count - 1)) As Byte
        CopyMemory Buffer(0), ByVal Address, Count
        Pointer2StringW = Buffer
    End If
End Function

Private Sub Command1_Click()
    MsgBox GetServers("RIF-1")
End Sub


Проблемма в следующем: как мне узнать имена доступных доменов? Ведь в примере я узнаю имена компов по имени домена "RIF-1".
А как мне узнать доступные все домены?

san*
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 17.06.2004 (Чт) 17:57
Откуда: Киев

Сообщение san* » 22.07.2004 (Чт) 17:50

Я когда долбался с подобной проблемой и написал для себя dll. Посмотри исходники если хочешь, если нет просто скомпилируй и юзай.
P.s. Там все через коллекции. Т.е. в Nets елменты Net, в которых - Domains, что состоят из Domain, в которых Servers, каждый из которых Server. В каждом из елемнтов есть SRemouteName, который указывает на имя. Для использования создай MyNets as NEW Nets, а потм Nets.Connect
Вложения
OLENet.rar
(16.52 Кб) Скачиваний: 29

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 23.07.2004 (Пт) 8:43

Спасибо за примерчик.
Только что-то я не догоняю. Можешь привести не большой пример?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, The trick и гости: 11

    TopList