Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten
Autor
Nachricht
erbse
Newbie
Newbie

Anmeldedatum: 17.09.2010
Beiträge: 3

konsolen anwendung in eine forms anwendung bringen
Verfasst am: 28.09.2010, 17:12

hy liebe com ich habe hier einen code für eine consolen anwendung mit dem man das netzwerk scannt
ich möchte dies aber in eine forms anwendung packen und das das ergebniss in einer textbox erscheint aber leider scheitere ich daran
kann mir da jemand helfen hier der code:

Code:


Option Strict On

Module SimpleScanner

    Dim WithEvents __Scanner As NetworkScanner
    Dim __IPs As List(Of NetworkScanner.PingResult)

    Sub Main()
        Dim abc As String = "192.168.1"

        Console.Title = "Erbses Simpler IPScanner"
        Console.WriteLine("Erbses Simpler IP-Scanner.")
        Console.WriteLine()

        Dim args As String() = Environment.GetCommandLineArgs()
        If args.Length > 1 Then
            Dim abc_ As String = FilterMask(args(1))
            If abc_ <> "-1" Then
                abc = abc_
                Console.WriteLine("Benutze Adressbereich aus Kommandozeile: {0}", abc)
            Else
                Console.WriteLine("Der Adressbereich der Kommandozeilenargumente konnte nicht validiert werden.")
                Console.WriteLine("Benutze standard Adressbereich: {0}", abc)
            End If
        Else
            Console.WriteLine()
            Console.WriteLine("Bitte geben Sie die ersten drei Teile der IP-Adresse an. (z.B. 192.168.178)")

            Dim input As String = Console.ReadLine().Trim
            If input = String.Empty Then
                Console.WriteLine("Keine Eingabe entdeckt.")
                Console.WriteLine("Benutze standard Adressbereich: {0}", abc)
            Else
                Dim abc_ As String = FilterMask(input)
                If abc_ <> "-1" Then
                    abc = abc_
                    Console.WriteLine("Benutze eingegebenen Adressbereich: {0}", abc)
                Else
                    Console.WriteLine("Der Adressbereich konnte nicht validiert werden.")
                    Console.WriteLine("Benutze standard Adressbereich: {0}", abc)
                End If
            End If
        End If

        Console.WriteLine()
        Console.WriteLine("Folgende Computer sind im Netzwerk angemeldet:")
        Console.WriteLine()
        Console.WriteLine("##   PC-Name")

        __Scanner = New NetworkScanner(abc)
        __Scanner.Scan()

        While __Scanner.IsScanning : End While

        Dim s As String = Console.ReadLine()
        s = s.Trim
        If IsNumeric(s) Then
            Dim nummer As Integer = Integer.Parse(s)
            Dim ip_arr As NetworkScanner.PingResult() = __IPs.ToArray
            If nummer <= ip_arr.Length - 1 Then
                My.Computer.Clipboard.SetText(ip_arr(nummer).IP)
                Console.WriteLine("Die IP-Adresse ""{0}"" wurde in Ihre Zwischenablage kopiert.", ip_arr(nummer))
            End If
        ElseIf s = "a" Then
            Dim Result_arr As NetworkScanner.PingResult() = __IPs.ToArray
            Dim IP_Only_arr(__IPs.Count - 1) As String
            Dim zaehler As Integer = 0
            For Each result As NetworkScanner.PingResult In __IPs
                IP_Only_arr(zaehler) = result.IP
                zaehler += 1
            Next
            Dim clip As String = Join(IP_Only_arr, Environment.NewLine)
            My.Computer.Clipboard.SetText(clip)
            Console.WriteLine("Die IP-Adressen wurden in Ihre Zwischenablage kopiert.")
        End If
    End Sub

    Friend Function FilterMask(ByVal input As String) As String
        Dim pt As String = "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
        Dim m As System.Text.RegularExpressions.Match = System.Text.RegularExpressions.Regex.Match(input, pt)
        If m.Captures.Count <> 1 Then
            Return "-1"
        Else
            Return m.Value
        End If
    End Function

    Private Sub __Scanner_ScanComplete(ByVal AvailabeIPs As System.Collections.Generic.List(Of NetworkScanner.PingResult)) Handles __Scanner.ScanComplete
        __IPs = AvailabeIPs
        Dim _Counter As Integer = 0
        For Each PingResult As NetworkScanner.PingResult In __IPs
            Console.WriteLine("{0,-3}  {2,-20}", _Counter, PingResult.IP, PingResult.Hostname, PingResult.ElapsedTime)
            _Counter += 1
        Next

        Console.WriteLine()
        Console.WriteLine()

        Console.WriteLine("Scannen fertig.")
        Console.WriteLine()

        If _Counter > 0 Then
            Console.WriteLine("'a' zum Kopieren aller IPs.")
            Console.WriteLine("Eine Nummer, um eine bestimmte zu kopieren")
        Else
            Console.WriteLine("Es wurden keine IPs gefunden.") 'Unwahrscheinlich, da normalerweise mindestens der Localhost im Netz ist ^^
            'Man kann aber nie wissen.
        End If
    End Sub
End Module

Friend Class NetworkScanner
    Public Property MaxThreads As Integer = 20
    Public Property CurrentThreads As Integer = 0
    Protected __Subnet As String
    Protected __IPList As New List(Of PingResult)
    Protected __ResultCounter As Integer

    Public ReadOnly Property IPList As List(Of PingResult)
        Get
            Return __IPList
        End Get
    End Property
    Public ReadOnly Property Subnet As String
        Get
            Return __Subnet
        End Get
    End Property
    Public ReadOnly Property IsScanning As Boolean
        Get
            Return __ResultCounter < 255
        End Get
    End Property

    Public Event ScanComplete(ByVal AvailabeIPs As List(Of PingResult))

    Public Sub New(ByVal Subnet As String)
        __Subnet = Subnet
    End Sub
    Public Sub Scan()
        For d As Integer = 0 To 255 Step 1
            Dim ping As New IPPinger(Me, String.Format("{0}.{1}", __Subnet, d))
            AddHandler ping.GotPingResult, AddressOf GotPingResult
            ping.StartPing()
        Next
    End Sub
    Private Sub GotPingResult(ByVal sender As NetworkScanner, ByVal e As PingResult)
        If e.Successful Then
            'Man könnte auch die nicht erfolgreichen adden, mache ich hier aber nicht, weil wir nur die erfolgreichen haben wollen ;)
            __IPList.Add(e)
        End If
        __ResultCounter += 1
        If __ResultCounter > 255 Then
            RaiseEvent ScanComplete(__IPList)
        End If
    End Sub

    Friend Structure PingResult
        Dim IP As String
        Dim Successful As Boolean
        Dim ElapsedTime As Long
        Dim Hostname As String
        Dim TimeOut As Integer
        Friend Sub New(ByVal _IP As String, ByVal _Successful As Boolean, ByVal _ElapsedTime As Long, ByVal _Hostname As String, ByVal _TimeOut As Integer)
            IP = _IP
            Successful = _Successful
            ElapsedTime = _ElapsedTime
            Hostname = _Hostname
            TimeOut = _TimeOut
        End Sub
    End Structure
End Class

Friend Class IPPinger
    Protected __IP As String
    Protected __Scanner As NetworkScanner
    Protected __TimeOut As Integer

    Public Shared ReadOnly Property StandardTimeOut As Integer
        Get
            Return 1000
        End Get
    End Property
    Public ReadOnly Property IP As String
        Get
            Return __IP
        End Get
    End Property

    Public Event GotPingResult(ByVal sender As NetworkScanner, ByVal e As NetworkScanner.PingResult)

    Public Sub New(ByVal _Scanner As NetworkScanner, ByVal _IP As String)
        __Scanner = _Scanner
        __IP = _IP
        __TimeOut = 1000
    End Sub
    Public Sub New(ByVal _Scanner As NetworkScanner, ByVal _IP As String, ByVal _TimeOut As Integer)
        __Scanner = _Scanner
        __IP = _IP
        __TimeOut = _TimeOut
    End Sub

    Public Sub StartPing()
        While __Scanner.CurrentThreads >= __Scanner.MaxThreads : End While
        Dim t As New Threading.Thread(AddressOf _ping_ip_thread)
        t.Name = __IP & " - Pingthread"
        t.Start(__IP)
    End Sub
    Private Sub _ping_ip_thread(ByVal _IP As Object)
        __Scanner.CurrentThreads += 1
        Try
            Dim Milliseconds As Long = Me.DoPing(_IP.ToString)
            Dim result As NetworkScanner.PingResult
            If Milliseconds <> -1 Then
                Dim HostName As String = Net.Dns.GetHostEntry(_IP.ToString).HostName
                result = New NetworkScanner.PingResult(_IP.ToString, True, Milliseconds, HostName, __TimeOut)
            Else
                result = New NetworkScanner.PingResult(_IP.ToString, False, Milliseconds, String.Empty, __TimeOut)
            End If
            RaiseEvent GotPingResult(__Scanner, result)
        Catch ex As Exception
            Throw ex 'Ja, sinnlos, ich weiß. Man könnte auch einen "Nicht-erreichbar"-Pin zurückgeben.
        Finally
            __Scanner.CurrentThreads -= 1
        End Try
    End Sub
    Private Function DoPing(ByVal _IP As String) As Long
        Dim ping As New Net.NetworkInformation.Ping
        Dim reply As Net.NetworkInformation.PingReply = ping.Send(_IP, __TimeOut)
        If reply.Status = Net.NetworkInformation.IPStatus.Success Then
            Return reply.RoundtripTime
        Else
            Return -1
        End If
    End Function
End Class



lg erbse
 
christopher.g
Überflieger
Überflieger

Anmeldedatum: 03.05.2008
Beiträge: 565


Verfasst am: 29.09.2010, 12:50

gib den text in einer txt datei aus
und diese öffnest dann mit shell

ist zwar nicht ganz das was du suchst
aber würde acuh gehen
lg
 
erbse
Newbie
Newbie

Anmeldedatum: 17.09.2010
Beiträge: 3


Verfasst am: 30.09.2010, 00:08

ja nur möchte ich auch die eingaben über eine textbox machen und es soll keine konsole mehr da sein

lg
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten

Tags: anwendung, clipboard, netzwerk, konsolen, hostname

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge [suche] Tuturials winsock & daten senden 983 09.06.2011, 13:19
Keine neuen Beiträge [Video] *.dll & *.ocx Installer 2612 06.03.2008, 21:19
Keine neuen Beiträge ListView speichern & laden 1331 05.08.2008, 13:32
Keine neuen Beiträge Registry & Co Fragen 1203 03.05.2007, 10:57
Keine neuen Beiträge Listbox speichern & laden 2270 22.03.2007, 21:25
 


[ Time: 0.3233s ][ Queries: 88 (0.1849s) ][ GZIP on - Debug on ]