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?
Prüfen, ob ein Prozess noch Verbindung zum Internet hat
-
- [ gelöst ]
-
NoName -
6. Mai 2008 um 14:55 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
Stasrte mal netstat -b in einer DosBox
Mega
-
..., 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][/autoit]Vielleicht so:
[autoit]$PROZESS = "firefox.exe" ; Prozessname
[/autoit]
$cmd = Run(@ComSpec & " /c " & 'netstat -b', "", @SW_HIDE, 2)
$cmdread = StdoutRead($cmd)
If StringInStr($cmdread, "["&$PROZESS&"]") Then ProcessClose($PROZESS) -
Spoiler anzeigen
[autoit]#include <Constants.au3>
[/autoit] [autoit][/autoit] [autoit];===============================================================================
[/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
;
;===============================================================================Func _CheckProcessConnect($sProcess,$iIp = False)
[/autoit]
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
EndFuncdafü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];===============================================================================
[/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
;
;===============================================================================$list = ProcessList("sro_client.exe")
[/autoit] [autoit][/autoit] [autoit]
msgbox(0,"Client Detection" , "Clients counted:" & $list[0][0])
for $i = 1 to $list[0][0]IF _CheckProcessConnect("sro_client.exe","") = 1 then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
msgbox(0,"", "Client" & $i & " : " &$list[$i][1] & "besteht")
else
msgbox(0,"", "Client" & $i & " : " &$list[$i][1] &"besteht nicht")
endif
NextFunc _CheckProcessConnect($sProcess,$iIp = False)
[/autoit]
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
EndFuncmfg
-
Ok, danke euch beiden. Habe mir mal die Funktion von thastony (qon) gegriffen, ist leichter und geht fix