network nutzer

  • VB6

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Kröger.

    network nutzer

    kann mir bitte jemand sagen wie ich in eine lisbox per button die namen der computer in einem netzwerk speichere und dann wenn ich z. B. doppelklick mahc sich ein fenster öffnet wo man demjenigen eine nachricht sendet dazu benötigt man doch dann die ip oder? wenn man die braucht wie mache ich dass dann dass die ip zu jedem namen gespeichert wird??
    da ich dass ja noch nicht so gut kombinieren kann wäre es nett mir ein fertiges schnipsel zu geben wenn jemand die zeit findet und mir einenes gibt?

    <font color="red"> Schonmal was von der Editierfunktion gehört? Bitte diese in Zukunft benutzen! </font>

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Die Namen kannst du mit einer API auslesen:

    'Für Netzwerk-PC-Routine
    Private Type NETRESOURCE
    dwScope As Long
    dwType As Long
    dwDisplayType As Long
    dwUsage As Long
    pLocalName As Long
    pRemoteName As Long
    pComment As Long
    pProvider As Long
    End Type

    Private Type NETRESOURCE_REAL
    dwScope As Long
    dwType As Long
    dwDisplayType As Long
    dwUsage As Long
    sLocalName As String
    sRemoteName As String
    sComment As String
    sProvider As String
    End Type

    Private Type HOSTENT2
    hName As Long
    hAliases As Long
    hAddrType As Integer
    hLength As Integer
    hAddrList As Long
    End Type




    Private Const RESOURCE_GLOBALNET As Long = &H2&

    Private Const RESDTYPE_SERVER& = &H2

    Private Const RESOURCETYPE_ANY As Long = &H0&

    Private Const RESOURCEUSAGE_ALL As Long = &H0&
    Private Const RESOURCEUSAGE_CONTAINER As Long = &H2&

    Private Const NO_ERROR = 0
    Private Const ERROR_MORE_DATA = 234
    Private Const RESOURCE_ENUM_ALL As Long = &HFFFF


    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
    Private Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal hostname As String) As Long
    Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVersionRequired&, lpWSAdata As WSAdata) As Long
    Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long
    Private Declare Function IcmpSendEcho Lib "ICMP" (ByVal IcmpHandle As Long, ByVal DestAddress As Long, _
    ByVal RequestData As String, ByVal RequestSize As Integer, _
    RequestOptns As IP_optINFORMATION, ReplyBuffer As IP_ECHO_REPLY, _
    ByVal ReplySize As Long, ByVal TimeOut As Long) As Boolean
    Private Declare Sub RtlMoveMemory Lib "kernel32" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)

    Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias _
    "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As _
    Long, ByVal dwUsage As Long, lpNetResource As Any, lphEnum _
    As Long) As Long

    Private Declare Function WNetEnumResource Lib "mpr.dll" Alias _
    "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, _
    lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long

    Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum _
    As Long) As Long

    Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" _
    (ByVal lpString As Any) As Long

    Private Const SOCKET_ERROR = 0

    Private Const PROCESS_TERMINATE = &H1
    Private Const BUFFER_LENGTH = 512
    Private Const INFINITE = -1&
    Private Const SYNCHRONIZE = &H100000






    Public Sub GetLanIPs()
    Exit Sub
    nwa.com_net.Clear
    Const MAX_RESOURCES = 256
    Const NOT_A_CONTAINER = -1

    Dim bFirstTime As Boolean
    Dim lRet&, hEnum&, lCnt&, lMin&, lLen&, l&, lBufSize&, lLastIx&
    Dim nRem$, F$
    Dim uNetApi(0 To MAX_RESOURCES) As NETRESOURCE
    Dim uNet() As NETRESOURCE_REAL
    Dim MaxUBound As Long

    bFirstTime = True

    Do
    If bFirstTime Then
    lRet = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, ByVal 0&, hEnum)
    bFirstTime = False
    Else
    If uNet(lLastIx).dwUsage And RESOURCEUSAGE_CONTAINER Then
    lRet = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, uNet(lLastIx), hEnum)
    Else
    lRet = NOT_A_CONTAINER
    hEnum = 0
    End If
    lLastIx = lLastIx + 1
    End If

    If lRet = NO_ERROR Then
    lCnt = RESOURCE_ENUM_ALL
    Do
    lBufSize = UBound(uNetApi) * Len(uNetApi(0)) / 2
    lRet = WNetEnumResource(hEnum, lCnt, uNetApi(0), lBufSize)
    If lCnt > 0 Then
    ReDim Preserve uNet(0 To lMin + lCnt - 1) As NETRESOURCE_REAL
    For l = 0 To lCnt - 1
    uNet(lMin + l).dwScope = uNetApi(l).dwScope
    uNet(lMin + l).dwType = uNetApi(l).dwType
    uNet(lMin + l).dwDisplayType = uNetApi(l).dwDisplayType
    uNet(lMin + l).dwUsage = uNetApi(l).dwUsage
    If uNetApi(l).pLocalName Then
    lLen = lstrlen(uNetApi(l).pLocalName)
    uNet(lMin + l).sLocalName = Space$(lLen)
    CopyMemory ByVal uNet(lMin + l).sLocalName, ByVal uNetApi(l).pLocalName, lLen
    End If
    If uNetApi(l).pRemoteName Then
    lLen = lstrlen(uNetApi(l).pRemoteName)
    uNet(lMin + l).sRemoteName = Space$(lLen)
    CopyMemory ByVal uNet(lMin + l).sRemoteName, ByVal uNetApi(l).pRemoteName, lLen
    End If
    If uNetApi(l).pComment Then
    lLen = lstrlen(uNetApi(l).pComment)
    uNet(lMin + l).sComment = Space$(lLen)
    CopyMemory ByVal uNet(lMin + l).sComment, ByVal uNetApi(l).pComment, lLen
    End If
    If uNetApi(l).pProvider Then
    lLen = lstrlen(uNetApi(l).pProvider)
    uNet(lMin + l).sProvider = Space$(lLen)
    CopyMemory ByVal uNet(lMin + l).sProvider, ByVal uNetApi(l).pProvider, lLen
    End If
    Next l
    End If
    lMin = lMin + lCnt
    Loop While lRet = ERROR_MORE_DATA
    End If
    If hEnum Then l = WNetCloseEnum(hEnum)
    Loop While lLastIx < lMin

    On Error Resume Next
    MaxUBound = UBound(uNet)
    If Err.Number = 0 Then
    For l = 0 To UBound(uNet)
    If uNet(l).dwDisplayType = RESDTYPE_SERVER Then
    F = uNet(l).sRemoteName
    F = Replace$(F, "\", vbNullString)
    F = Replace$(F, "/", vbNullString)
    F = LCase(F)
    If F <> vbNullString Then
    nwa.com_net.AddItem F 'Ist deine Liste
    End If
    End If
    Next l
    End If
    On Error GoTo 0
    End Sub



    Nachrichten kannst mit folgender API senden:

    Private Declare Function NetMessageBufferSend Lib _
    "NETAPI32.DLL" (yServer As Any, yToName As Byte, _
    yFromName As Any, yMsg As Byte, ByVal lSize As Long) As Long

    Private Const NERR_Success As Long = 0&

    Public Function DoNetSend(sToUser As String, _
    sFromUser As String, sMessage As String) As Boolean

    Dim yToName() As Byte
    Dim yFromName() As Byte
    Dim yMsg() As Byte
    Dim l As Long

    yToName = sToUser & vbNullChar
    yFromName = sFromUser & vbNullChar
    yMsg = sMessage & vbNullChar

    If NetMessageBufferSend(ByVal 0&, yToName(0), ByVal 0&, _
    yMsg(0), UBound(yMsg)) = NERR_Success Then

    DoNetSend = True

    End If

    End Function




    Felix Kröger