Prüfen, ob ein Prozess noch Verbindung zum Internet hat

  • Hallo, ich möchte folgendes tun:
    Ein Tool was ständig überprüft, ob ein Prozess noch Verbindung zum Internet hat. Aber wie mache ich das? Habe gehört, dass es mit der netstat.exe im Win32 Ordner geht, aber wie? Weiß das einer von euch?

    Einmal editiert, zuletzt von NoName (6. Mai 2008 um 19:55)

  • ..., Ja ok, aber wie binde ich das in ein Tool ein, das, wenn der Prozess keine Verbindung mehr hat, den Prozess schließt?

  • Weiß das denn echt keiner? Gibt es nciht auch eine Lösung ohne Netstat?

  • Netstat ist doch ne gute idee, man kann ja den code eines cmd fensters mit autoit herauslesen, dann kannst du es ja dort weiter bearbeiten.

    [autoit]

    StdoutRead

    [/autoit]

    Vielleicht so:

    [autoit]

    $PROZESS = "firefox.exe" ; Prozessname
    $cmd = Run(@ComSpec & " /c " & 'netstat -b', "", @SW_HIDE, 2)
    $cmdread = StdoutRead($cmd)
    If StringInStr($cmdread, "["&$PROZESS&"]") Then ProcessClose($PROZESS)

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Checks if a process is connected - to the internet / to a specific IP
    ; Syntax: _CheckProcessConnect($sProcess,$iIp = False)
    ; Parameter(s): $sProcess = Processname / Process ID to look for
    ; $iIp = The IP that the Process should be connected to [ optional! ]
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0 and sets @error
    ; 1 = No connection exists
    ; 2 = Process does not exist
    ; 3 = No german Windows
    ; Author(s): qon
    ; Note(s): None
    ;
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit]

    Func _CheckProcessConnect($sProcess,$iIp = False)
    If RegRead("HKEY_CURRENT_USER\Control Panel\International\", "sLanguage") <> "DEU" Then
    SetError(3)
    Return 0
    EndIf
    $iPID = ProcessExists($sProcess)
    If $iPID = 0 then
    SetError(2)
    Return 0
    EndIf
    $foo = Run(@ComSpec & " /c netstat -on", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    Switch $iIp
    Case False
    If StringInStr(" " & $line & " ",$iPID) and StringInStr(" " & $line & " ","HERGESTELLT") Then
    Return 1
    EndIf
    Case Else
    If StringInStr(" " & $line & " ",$iPID) and StringInStr(" " & $line & " ","HERGESTELLT") and StringInStr(" " & $line & " ",$iIp) Then
    Return 1
    EndIf
    EndSwitch
    Wend
    SetError(1)
    Return 0
    EndFunc

    [/autoit]

    dafür besten dank an qon, siehe: [ gelöst ] Abbruch einer Verbindung feststellen


    und diese funktion haben wir daraus gemacht(für das spiel silkroad, überprüft alle instanzen des prozesses):

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Checks if a process is connected - to the internet / to a specific IP
    ; Syntax: _CheckProcessConnect($sProcess,$iIp = False)
    ; Parameter(s): $sProcess = Processname / Process ID to look for
    ; $iIp = The IP that the Process should be connected to [ optional! ]
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0 and sets @error
    ; 1 = No connection exists
    ; 2 = Process does not exist
    ; 3 = No german Windows
    ; Author(s): qon
    ; Note(s): None
    ;
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit]

    $list = ProcessList("sro_client.exe")
    msgbox(0,"Client Detection" , "Clients counted:" & $list[0][0])
    for $i = 1 to $list[0][0]

    [/autoit] [autoit][/autoit] [autoit]

    IF _CheckProcessConnect("sro_client.exe","") = 1 then
    msgbox(0,"", "Client" & $i & " : " &$list[$i][1] & "besteht")
    else
    msgbox(0,"", "Client" & $i & " : " &$list[$i][1] &"besteht nicht")
    endif
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CheckProcessConnect($sProcess,$iIp = False)
    If RegRead("HKEY_CURRENT_USER\Control Panel\International\", "sLanguage") <> "DEU" Then
    SetError(3)
    Return 0
    EndIf

    $iPID = $list[$i][1]
    $foo = Run(@ComSpec & " /c netstat -on", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    Switch $iIp
    Case False
    If StringInStr(" " & $line & " ",$iPID) and StringInStr(" " & $line & " ","TCP") Then
    Return 1
    EndIf
    Case Else
    If StringInStr(" " & $line & " ",$iPID) and StringInStr(" " & $line & " ","TCP") and StringInStr(" " & $line & " ",$iIp) Then
    Return 1
    EndIf
    EndSwitch
    Wend
    SetError(1)
    Return 0
    EndFunc

    [/autoit]


    mfg

  • Ok, danke euch beiden. Habe mir mal die Funktion von thastony (qon) gegriffen, ist leichter und geht fix :D