PingList




      Hallo,
      das Programm hab ich mal für einen Kollegen geschrieben der testen wollte ob alle Server durchlaufen oder sich zwischendurch neustarten

      Funktionsweise:
      Spoiler anzeigen
      Das Programm pingt eine Liste von IP's und versendet, wenn sich ein Status ändert eine E-Mail.

      Man kann im Programm die IP's mit Beschreibung usw. eintragen.
      Die E-Mail Adresse wird bis aufs Passwort in eine ini geschrieben, damit man beim nächsten Start nicht wieder alles eingeben muss.
      Jeder Eintrag in der Liste bekommt einen eigenen Prozess.
      Schreibt Statusänderungen in ein Textdokument.



      Pinglist Code:
      Spoiler anzeigen

      AutoIt-Quellcode

      1. #cs --------------------------------------------------------------------------------------------------------
      2. Name: PingList
      3. Description: Ping a list of Computers, write protocols, send e-mails if a Computer change his mode
      4. Author: I3asti
      5. #ce --------------------------------------------------------------------------------------------------------
      6. #include <GUIConstants.au3>
      7. #include <date.au3>
      8. #include <GuiListView.au3>
      9. #include <file.au3>
      10. #include <mail.au3>
      11. #include <EditConstants.au3>
      12. #include <StructureConstants.au3>
      13. #include <Clipboard.au3>
      14. #include <GUIConstantsEx.au3>
      15. Opt("GUIOnEventMode", 1)
      16. Dim $IP_Adresse, $Timeout, $Kunde, $Beschreibung, $Intervall, $k, $File, $t, $Server, $Benutzername, $Passwort, $EMail, $Smtp, $Port, $SSL, $string, $stringsplit
      17. $ProgrammStatus = 0
      18. $Stop = 0
      19. Global $Adressen_Array[10000]
      20. $Adressen = @ScriptDir & "\pingliste.txt"
      21. $Ende = @ScriptDir & "\Ende.txt"
      22. $ESave = @ScriptDir & "\EMail.ini"
      23. $FirstRun = 1
      24. $Status_End1 = "Online"
      25. $Status_End2 = "Offline"
      26. $z = 0
      27. $Laufzeit = 0
      28. #region GUI
      29. $Ping = GUICreate("Ping", 961, 550, 193, 125)
      30. $Listview2 = GUICtrlCreateListView("Kunde|Beschreibung|IP-Adresse|Timeout|Ergebnis|letzter Ping", 8, 8, 946, 115)
      31. GUICtrlSendMsg(-1, 0x101E, 0, 175)
      32. GUICtrlSendMsg(-1, 0x101E, 1, 175)
      33. GUICtrlSendMsg(-1, 0x101E, 2, 166)
      34. GUICtrlSendMsg(-1, 0x101E, 3, 115)
      35. GUICtrlSendMsg(-1, 0x101E, 4, 155)
      36. GUICtrlSendMsg(-1, 0x101E, 5, 155)
      37. $Listview = GUICtrlCreateListView("Kunde|Beschreibung|IP-Adresse|Timeout|Ergebnis|letzter Ping", 8, 128, 609, 377)
      38. GUICtrlSendMsg(-1, 0x101E, 0, 85)
      39. GUICtrlSendMsg(-1, 0x101E, 1, 125)
      40. GUICtrlSendMsg(-1, 0x101E, 2, 120)
      41. GUICtrlSendMsg(-1, 0x101E, 3, 65)
      42. GUICtrlSendMsg(-1, 0x101E, 4, 85)
      43. GUICtrlSendMsg(-1, 0x101E, 5, 125)
      44. $Kunde_Label = GUICtrlCreateLabel("Kunde", 632, 128, 50, 24)
      45. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      46. $Kunde_Input = GUICtrlCreateInput($Kunde, 688, 128, 265, 21)
      47. $Beschreibung_Label = GUICtrlCreateLabel("Beschreibung", 632, 160, 102, 24)
      48. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      49. $Beschreibung_Input = GUICtrlCreateInput($Beschreibung, 736, 160, 217, 21)
      50. $IP_Label = GUICtrlCreateLabel("IP", 632, 192, 19, 24)
      51. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      52. $IP_Input = GUICtrlCreateInput($IP_Adresse, 656, 192, 297, 21)
      53. $Timeout_Label = GUICtrlCreateLabel("Timeout", 632, 224, 61, 24)
      54. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      55. $Timeout_Input = GUICtrlCreateInput($Timeout, 696, 224, 257, 21)
      56. $Insert = GUICtrlCreateButton("Hinzufügen", 880, 256, 75, 25, 0)
      57. $Modus_Label = GUICtrlCreateLabel("Modus", 632, 264, 52, 24)
      58. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      59. $Dauerping_Radio = GUICtrlCreateRadio("Dauerping (Jede Sekunde)", 632, 288, 250, 25)
      60. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      61. $Intervall_Radio = GUICtrlCreateRadio("Intervall", 632, 320, 113, 17)
      62. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      63. $Intervall_Input = GUICtrlCreateInput($Intervall, 832, 320, 121, 21)
      64. $Aktueller_Ping = GUICtrlCreateLabel("Aktueller Ping:", 120, 520, 500, 24)
      65. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      66. $Benutzername_Input = GUICtrlCreateInput($Benutzername, 632, 386, 129, 21)
      67. $Passwort_Input = GUICtrlCreateInput($Passwort, 784, 386, 109, 21, $ES_PASSWORD)
      68. $SSL_Check = GUICtrlCreateCheckbox("SSL", 904, 386)
      69. $Benutzername_Label = GUICtrlCreateLabel("Benutzername", 632, 362, 109, 24)
      70. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      71. $Passwort_Label = GUICtrlCreateLabel("Passwort", 784, 362, 109, 24)
      72. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      73. $Zieladresse_Label = GUICtrlCreateLabel("Ziel-EMail", 632, 416, 109, 24)
      74. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      75. $Zieladresse_Input = GUICtrlCreateInput($EMail, 632, 440, 129, 21)
      76. $SMTP_Label = GUICtrlCreateLabel("SMTP-Server", 784, 416, 109, 24)
      77. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      78. $SMTP_Input = GUICtrlCreateInput($Smtp, 784, 440, 109, 21)
      79. $Port_Label = GUICtrlCreateLabel("Port", 904, 416, 69, 24)
      80. GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
      81. $Port_Input = GUICtrlCreateInput($Port, 904, 440, 49, 21)
      82. $Delete_Button = GUICtrlCreateButton("Löschen", 632, 480, 75, 25, 0)
      83. $Ende_Button = GUICtrlCreateButton("Ende", 792, 480, 75, 25, 0)
      84. $Start_Button = GUICtrlCreateButton("Start", 880, 480, 75, 25, 0)
      85. $Lade_Button = GUICtrlCreateButton("Lade Daten", 8, 520, 75, 25, 0)
      86. $Testmail_Button = GUICtrlCreateButton("Test-Mail", 792, 520, 75, 25, 0)
      87. $Close_Button = GUICtrlCreateButton("Beenden", 880, 520, 75, 25, 0)
      88. GUISetState(@SW_SHOW)
      89. GUICtrlSetOnEvent($Start_Button, "_Start")
      90. GUICtrlSetOnEvent($Ende_Button, "_End")
      91. GUICtrlSetOnEvent($Close_Button, "_Close")
      92. GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")
      93. GUICtrlSetOnEvent($Lade_Button, "_LadeDaten")
      94. GUICtrlSetOnEvent($Insert, "_SchreibeDaten")
      95. GUICtrlSetOnEvent($Delete_Button, "_Delete")
      96. GUICtrlSetOnEvent($Testmail_Button, "_Testmail")
      97. #endregion GUI
      98. Call("_LadeDaten")
      99. If $ProgrammStatus = 1 Then
      100. AdlibRegister("_Ziel_Status", 1000)
      101. EndIf
      102. While 1
      103. Sleep(100) ;damit er nicht 100% cpu verbrauch
      104. If $Laufzeit > 1000 Then
      105. Run(@ScriptName)
      106. Sleep(100)
      107. Exit
      108. EndIf
      109. WEnd
      110. Func _Testmail()
      111. $Benutzername = GUICtrlRead($Benutzername_Input)
      112. $Passwort = GUICtrlRead($Passwort_Input)
      113. $EMail = GUICtrlRead($Zieladresse_Input)
      114. $Smtp = GUICtrlRead($SMTP_Input)
      115. $Port = GUICtrlRead($Port_Input)
      116. If $Benutzername <> "" Then ;Wenn Benutzername und Passwort nicht leer sind
      117. If $Passwort <> "" Then ;Wenn Benutzername und Passwort nicht leer sind
      118. If $EMail <> "" Then ;Wenn die Zieladresse nicht leer ist
      119. If $Smtp <> "" Then ;Wenn ein SMTP-Server eingetragen ist
      120. If $Port <> "" Then ;Wenn ein Port eingetragen ist
      121. If StringInStr($EMail, "@") Then
      122. If StringInStr($EMail, " ") Then
      123. MsgBox(16, "!!!Fehler!!!", "In der EMail ist ein Leerzeichen enthalten")
      124. Else
      125. If BitAND(GUICtrlRead($SSL_Check), $GUI_CHECKED) Then
      126. $SSL = 1 ;SSL an
      127. Else
      128. $SSL = "" ;SSL aus
      129. EndIf
      130. Call("_SchreibeEmail")
      131. Call("_Mail", $Benutzername, $Passwort, "Testmail", $EMail, $Smtp, $Port, $SSL)
      132. EndIf
      133. Else
      134. MsgBox(16, "!!!Fehler!!!", "In der EMail fehlt das @ Zeichen")
      135. EndIf
      136. Else
      137. MsgBox(16, "!!!Stop!!!", "Geben Sie einen Port an")
      138. EndIf
      139. Else
      140. MsgBox(16, "!!!Stop!!!", "Geben Sie einen SMTP-Server an")
      141. EndIf
      142. Else
      143. MsgBox(16, "!!!Stop!!!", "Geben Sie eine Zieladresse an")
      144. EndIf
      145. Else
      146. MsgBox(16, "!!!Stop!!!", "Geben Sie ein Passwort an")
      147. EndIf
      148. Else
      149. MsgBox(16, "!!!Stop!!!", "Geben Sie einen Benutzernamen an")
      150. EndIf
      151. EndFunc ;==>_Testmail
      152. Func _Delete()
      153. If $ProgrammStatus = 1 Then ;Test ob Ping bereits ausgeführt wird
      154. MsgBox(16, "!!!Stop!!!", "Ping wird gerade ausgeführt")
      155. Else
      156. $Del = _GUICtrlListView_GetSelectedIndices($Listview) ;Ausgewählter Eintrag in Del schreiben
      157. If $Del = "" Then
      158. MsgBox(16, "!!!Fehler!!!", "Wählen sie einen Eintrag aus") ;wenn kein Eintrag ausgewählt war
      159. Else
      160. $Del = $Del + 1 ;Del um eins erhöhen
      161. _ArrayDelete($Adressen_Array, $Del) ;Eintrag aus Array löschen
      162. $k = 0
      163. $d = 0 ;==> Zähler setzen
      164. FileDelete($Adressen) ;Liste löschen
      165. For $l = 1 To $Adressen_Array[0] Step 1
      166. If $d <> 0 Then ;beim ersten durchlauf nicht durchführen
      167. $k = $k + 1
      168. FileWriteLine($Adressen, $Adressen_Array[$k] & @CRLF) ;Eitnräge schreiben
      169. EndIf
      170. $d = 1
      171. Next
      172. Call("_LadeDaten") ;Daten laden
      173. EndIf
      174. EndIf
      175. EndFunc ;==>_Delete
      176. Func _Start()
      177. FileDelete($Ende)
      178. $Benutzername = GUICtrlRead($Benutzername_Input)
      179. $Passwort = GUICtrlRead($Passwort_Input)
      180. $EMail = GUICtrlRead($Zieladresse_Input)
      181. $Smtp = GUICtrlRead($SMTP_Input)
      182. $Port = GUICtrlRead($Port_Input)
      183. If $ProgrammStatus = 1 Then ;Test ob Ping bereits ausgeführt wird
      184. MsgBox(16, "!!!Stop!!!", "Ping läuft bereits")
      185. Else
      186. If $Benutzername <> "" Then ;Wenn Benutzername und Passwort nicht leer sind
      187. If $Passwort <> "" Then ;Wenn Benutzername und Passwort nicht leer sind
      188. If $EMail <> "" Then ;Wenn die Zieladresse nicht leer ist
      189. If $Smtp <> "" Then ;Wenn ein SMTP-Server eingetragen ist
      190. If $Port <> "" Then ;Wenn ein Port eingetragen ist
      191. If StringRegExp($EMail, "@") Then
      192. If StringRegExp($EMail, " ") Then
      193. MsgBox(16, "!!!Fehler!!!", "In der EMail ist ein Leerzeichen enthalten")
      194. Else
      195. If BitAND(GUICtrlRead($SSL_Check), $GUI_CHECKED) Then
      196. $SSL = 1 ;SSL an
      197. Else
      198. $SSL = "" ;SSL aus
      199. EndIf
      200. Call("_SchreibeEmail")
      201. IniWrite($ESave, "Running", "Running", "1")
      202. $Intervall = "" ;Setzt Intervall zurück
      203. Call("_Check")
      204. EndIf
      205. Else
      206. MsgBox(16, "!!!Fehler!!!", "In der EMail fehlt das @ Zeichen")
      207. EndIf
      208. Else
      209. MsgBox(16, "!!!Stop!!!", "Geben Sie einen Port an")
      210. EndIf
      211. Else
      212. MsgBox(16, "!!!Stop!!!", "Geben Sie einen SMTP-Server an")
      213. EndIf
      214. Else
      215. MsgBox(16, "!!!Stop!!!", "Geben Sie eine Zieladresse an")
      216. EndIf
      217. Else
      218. MsgBox(16, "!!!Stop!!!", "Geben Sie ein Passwort an")
      219. EndIf
      220. Else
      221. MsgBox(16, "!!!Stop!!!", "Geben Sie einen Benutzernamen an")
      222. EndIf
      223. EndIf
      224. EndFunc ;==>_Start
      225. Func _Close()
      226. If $ProgrammStatus <> 0 Then ;Test ob Ping ausgeführt wird
      227. MsgBox(16, "!!!Stop!!!", "Ping läuft noch bitte erst Ping beenden")
      228. Else
      229. Exit
      230. EndIf
      231. EndFunc ;==>_Close
      232. Func _Modus($Modus)
      233. $FirstRun = 1 ;Setzt FirstRun auf 0
      234. $Stop = 0 ;Setzt Stop wieder auf 0
      235. $t = 0 ;Setzt t auf 0
      236. $ProgrammStatus = 1 ;Setzt den ProgrammStatus auf laufend
      237. GUICtrlSetData($Aktueller_Ping, "Aktueller Ping:Ping läuft")
      238. If $Modus = 1 Then
      239. $Intervall = 1000
      240. Call("_Go") ;startet _Start
      241. ElseIf $Modus = 2 Then
      242. $Intervall = $Intervall * 1000
      243. Call("_Go") ;startet _Start
      244. EndIf
      245. EndFunc ;==>_Modus
      246. Func _Check()
      247. If GUICtrlRead($Dauerping_Radio) = 1 Then ;Wenn Dauerping gedrückt ist
      248. Call("_Modus", 1)
      249. ElseIf GUICtrlRead($Intervall_Radio) = 1 Then ;Wenn Intervall gedrückt ist
      250. $Intervall = GUICtrlRead($Intervall_Input) ;Intervall Wert einlesen
      251. If $Intervall <> "" Then ;Wenn Intervall nicht leer ist
      252. Call("_Modus", 2) ;Intervall Modus aufrufen
      253. Else
      254. MsgBox(16, "Fehler", "Bitte einen Intervall angeben") ;Ausgabe wenn Intervall leer ist
      255. EndIf
      256. Else
      257. MsgBox(16, "Fehler", "Bitte einen Modus auswählen") ;Wenn kein Modus angegeben ist
      258. EndIf
      259. EndFunc ;==>_Check
      260. Func _End()
      261. $Stop = 1 ;Setzt Stop auf 1
      262. $ProgrammStatus = 0 ;Setzt lauft auf 0
      263. GUICtrlSetData($Aktueller_Ping, "Aktueller Ping: Ping beendet")
      264. AdlibUnRegister("_Ziel_Status")
      265. FileWriteLine($Ende, $Stop)
      266. IniWrite($ESave, "Running", "Running", "0")
      267. EndFunc ;==>_End
      268. Func _Datum()
      269. $Heute = @YEAR & "." & @MON & "." & @MDAY & "|" ;Datum heute
      270. $Time = @HOUR & ":" & @MIN & ":" & @SEC & "|" ;Zeit jetzt
      271. $Datum = $Heute & $Time ; Datum und Zeit zusammensetzen
      272. Return $Datum
      273. EndFunc ;==>_Datum
      274. Func _Go()
      275. $k = -1
      276. For $l = 1 To $Adressen_Array[0] Step 1 ;solange obejekte im array sind
      277. $k = $k + 1
      278. $Dat = _GUICtrlListView_GetItemText($Listview, $k, 0) & "|" & _GUICtrlListView_GetItemText($Listview, $k, 1) & "|" & _GUICtrlListView_GetItemText($Listview, $k, 2) & "|" & _GUICtrlListView_GetItemText($Listview, $k, 3) & "|" & $Benutzername & "|" & $Passwort & "|" & $EMail & "|" & $Smtp & "|" & $Port & "|" & $SSL & "|" & $k & "|" & $Intervall & "|" ;schreibt die Daten für die Pingfunktion
      279. Run('"' & @ScriptDir & '\Ping.exe " "' & $Dat & '"')
      280. Sleep(500)
      281. Next
      282. $Zeit = $Intervall - 100
      283. Call("_Ziel_Status")
      284. Call("_Ziel_Status")
      285. AdlibRegister("_Ziel_Status", $Zeit)
      286. EndFunc ;==>_Go
      287. Func _Ziel_Status()
      288. _GUICtrlListView_DeleteAllItems($Listview2)
      289. $k = -1
      290. $o = -1
      291. $off = 0
      292. $Laufzeit = $Laufzeit + 1
      293. For $l = 1 To $Adressen_Array[0] Step 1 ;solange obejekte im array sind
      294. $k = $k + 1
      295. $Status_input = @ScriptDir & "\Status.ini" ;Status einlesen
      296. $Stat = IniRead($Status_input, $k, "Status", "Fehler beim lesen")
      297. $Datum = Call("_Datum") ;Führt Datum aus
      298. If $Stat = "Online" Then
      299. _GUICtrlListView_SetTextBkColor($Listview, 0x00ff00)
      300. $Datum = Call("_Datum") ;Führt Datum aus
      301. _GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 3), 3)
      302. _GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 2), 2)
      303. _GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 1), 1)
      304. _GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 0), 0)
      305. Else
      306. _GUICtrlListView_SetTextBkColor($Listview, 0x0000fa)
      307. _GUICtrlListView_SetTextBkColor($Listview2, 0x0000fa)
      308. $Datum = Call("_Datum") ;Führt Datum aus
      309. _GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 3), 3)
      310. _GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 2), 2)
      311. _GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 1), 1)
      312. _GUICtrlListView_SetItemText($Listview, $k, _GUICtrlListView_GetItemText($Listview, $k, 0), 0)
      313. $off = 1
      314. EndIf
      315. _GUICtrlListView_SetItemText($Listview, $k, $Stat, 4) ;Status schreiben
      316. $StatPing = IniRead($Status_input, $k, "Ping", "Fehler beim lesen")
      317. _GUICtrlListView_SetItemText($Listview, $k, $StatPing, 5) ;Status schreiben
      318. If $off = 1 Then
      319. $o = $o + 1
      320. GUICtrlCreateListViewItem("", $Listview2)
      321. _GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 5), 5)
      322. _GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 4), 4)
      323. _GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 3), 3)
      324. _GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 2), 2)
      325. _GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 1), 1)
      326. _GUICtrlListView_SetItemText($Listview2, $o, _GUICtrlListView_GetItemText($Listview, $k, 0), 0)
      327. $off = 0
      328. EndIf
      329. Next
      330. EndFunc ;==>_Ziel_Status
      331. Func _SchreibeDaten()
      332. If $ProgrammStatus = 1 Then ;Test ob Ping bereits ausgeführt wird
      333. MsgBox(16, "!!!Stop!!!", "Ping wird gerade ausgeführt")
      334. Else
      335. $Kunde = GUICtrlRead($Kunde_Input)
      336. $Beschreibung = GUICtrlRead($Beschreibung_Input)
      337. $IP = GUICtrlRead($IP_Input)
      338. $Timeout = GUICtrlRead($Timeout_Input)
      339. If $Kunde <> "" Then
      340. If $Beschreibung <> "" Then
      341. If $IP <> "" Then
      342. If $Timeout <> "" Then
      343. $Daten = $Kunde & "|" & $Beschreibung & "|" & $IP & "|" & $Timeout & "|"
      344. FileWriteLine($Adressen, $Daten & @CRLF)
      345. Else
      346. MsgBox(16, "!!!Fehler!!!", "Bitte vergewissern Sie sich, dass alle Felder ausgefüllt sind")
      347. EndIf
      348. Else
      349. MsgBox(16, "!!!Fehler!!!", "Bitte vergewissern Sie sich, dass alle Felder ausgefüllt sind")
      350. EndIf
      351. Else
      352. MsgBox(16, "!!!Fehler!!!", "Bitte vergewissern Sie sich, dass alle Felder ausgefüllt sind")
      353. EndIf
      354. Else
      355. MsgBox(16, "!!!Fehler!!!", "Bitte vergewissern Sie sich, dass alle Felder ausgefüllt sind")
      356. EndIf
      357. Call("_LadeDaten")
      358. EndIf
      359. EndFunc ;==>_SchreibeDaten
      360. Func _SchreibeEmail()
      361. FileDelete($ESave)
      362. IniWrite($ESave, "Benutzername", "Benutzername", $Benutzername)
      363. IniWrite($ESave, "EMail", "EMail", $EMail)
      364. IniWrite($ESave, "SMTP", "SMTP", $Smtp)
      365. IniWrite($ESave, "Port", "Port", $Port)
      366. IniWrite($ESave, "SSL", "SSL", $SSL)
      367. EndFunc ;==>_SchreibeEmail
      368. Func _LadeDaten()
      369. If $ProgrammStatus = 1 Then
      370. MsgBox(16, "!!!STOP!!!", "Programm läuft gerade")
      371. Else
      372. _GUICtrlListView_DeleteAllItems($Listview)
      373. ReDim $Adressen_Array[1]
      374. ReDim $Adressen_Array[500]
      375. _FileReadToArray($Adressen, $Adressen_Array)
      376. For $l = 1 To $Adressen_Array[0] Step 1
      377. GUICtrlCreateListViewItem($Adressen_Array[$l], $Listview)
      378. Next
      379. EndIf
      380. If FileExists($ESave) Then
      381. $Benutzername = IniRead($ESave, "Benutzername", "Benutzername", "Fehler beim auslesen")
      382. $EMail = IniRead($ESave, "EMail", "EMail", "Fehler beim auslesen")
      383. $Smtp = IniRead($ESave, "SMTP", "SMTP", "Fehler beim auslesen")
      384. $Port = IniRead($ESave, "Port", "Port", "Fehler beim auslesen")
      385. $SSL = IniRead($ESave, "SSL", "SSL", "Fehler beim auslesen")
      386. GUICtrlSetData($Benutzername_Input, $Benutzername) ;Benutzername in Feld schreiben
      387. GUICtrlSetData($Zieladresse_Input, $EMail) ;Email in Feld schreiben
      388. GUICtrlSetData($SMTP_Input, $Smtp) ;Smtp in Feld schreiben
      389. GUICtrlSetData($Port_Input, $Port) ;Port in Feld schreiben
      390. If $SSL <> "" Then
      391. GUICtrlSetState($SSL_Check, $GUI_CHECKED)
      392. Else
      393. GUICtrlSetState($SSL_Check, $GUI_UNCHECKED)
      394. EndIf
      395. EndIf
      396. $ProgrammStatus = IniRead($ESave, "Running", "Running", "0")
      397. EndFunc ;==>_LadeDaten


      Pingfunktion Code:
      Spoiler anzeigen

      AutoIt-Quellcode

      1. #cs --------------------------------------------------------------------------------------------------------
      2. Name: Pingfunktion
      3. Author: I3asti
      4. #ce ---
      5. #NoTrayIcon
      6. #include "file.au3"
      7. #include "mail.au3"
      8. #include "date.au3"
      9. #include "EditConstants.au3"
      10. #include "Array.au3"
      11. Dim $IP, $Kunde, $Beschreibung, $Timeout, $Intervall, $File, $t, $Server, $Benutzername, $Passwort, $EMail, $Smtp, $Port, $SSL, $Nummer, $Status_output, $Ping, $Status_Anderung, $Datum_Anderung, $Status, $Ping_output, $Restart
      12. $FirstRun = 0
      13. $Status_End1 = 1
      14. $Status_End2 = 2
      15. $Ende = @ScriptDir & "\Ende.txt"
      16. $Adressen = @ScriptDir & "\Data.txt"
      17. Global $Stop[5]
      18. $Stop[1] = 0
      19. $Zahler = 0
      20. Call("_Ziel_Status")
      21. Func _Datum()
      22. $Heute = @YEAR & "." & @MON & "." & @MDAY & "|" ;Datum heute
      23. $Time = @HOUR & ":" & @MIN & ":" & @SEC & "|" ;Zeit jetzt
      24. $Datum = $Heute & $Time ; Datum und Zeit zusammensetzen
      25. Return $Datum
      26. EndFunc ;==>_Datum
      27. Func _FirstRun()
      28. $Datum = Call("_Datum") ;Führt Datum aus
      29. $Datum_Anderung = $Datum ;Datum Anderung wird für Aktuellen Eintrag gesetzt
      30. If $Ping Then ;ping ausführen
      31. FileWriteLine($File, "Ping gestartet Status:|Online" & "|" & $Datum & @CRLF) ;positiv
      32. IniDelete($Status_output, $Nummer, "Status")
      33. IniWrite($Status_output, $Nummer, "Status", "Online")
      34. $Status = 1 ;Status schreiben
      35. $Letzte_Ping = $Datum ; Letzte Ping Zeit setzen
      36. $Status_Anderung = 2
      37. Else
      38. FileWriteLine($File, "Ping gestartet Status:|Offline" & "|" & $Datum & @CRLF) ;positiv
      39. IniDelete($Status_output, $Nummer, "Status")
      40. IniWrite($Status_output, $Nummer, "Status", "Offline")
      41. $Status = 2 ;Status schreiben
      42. $Letzte_Ping = $Datum ; Letzte Ping Zeit setzen
      43. $Status_Anderung = 1
      44. EndIf
      45. EndFunc ;==>_FirstRun
      46. Func _Status_Anderung($Status)
      47. $Datum = Call("_Datum") ;Führt Datum aus
      48. $Letzte_Ping = $Datum
      49. $Letzte_Ping = StringSplit($Letzte_Ping, "|")
      50. IniDelete($Status_output, $Nummer, "Ping")
      51. IniWrite($Status_output, $Nummer, "Ping", $Letzte_Ping[2])
      52. If $Status = 1 Then ;Wird Bei Status 1 ausgeführt
      53. If $Status_Anderung = $Status Then ;Wird bei einer Statusänderung ausgeführt
      54. Sleep(5000)
      55. $Ping = Ping($IP, $Timeout);Pingt
      56. If $Ping Then
      57. IniDelete($Status_output, $Nummer, "Status")
      58. IniWrite($Status_output, $Nummer, "Status", "Online")
      59. Call("_Schreiben", 1) ;Schreiben war Offline
      60. $Datum_Anderung = $Datum
      61. $Status_Anderung = 2
      62. EndIf
      63. EndIf
      64. Else
      65. If $Status_Anderung = $Status Then ;Wird bei einer Statusänderung ausgeführt
      66. Sleep(5000)
      67. $Ping = Ping($IP, $Timeout);Pingt
      68. If $Ping Then
      69. Else
      70. IniDelete($Status_output, $Nummer, "Status")
      71. IniWrite($Status_output, $Nummer, "Status", "Offline")
      72. Call("_Schreiben", 2) ;Schreiben war Online
      73. $Datum_Anderung = $Datum
      74. $Status_Anderung = 1
      75. EndIf
      76. EndIf
      77. EndIf
      78. $FirstRun = 1 ;wird auf 2ten durchlauf gesetzt
      79. EndFunc ;==>_Status_Anderung
      80. Func _Schreiben($Modus)
      81. If $FirstRun = 1 Then ;beim ersten durchlauf nicht ausführen
      82. $Datum = Call("_Datum") ;Führt Datum aus
      83. If $Modus = 1 Then
      84. Call("_Mail", $Benutzername, $Passwort, $Server & " ist Online gegangen", $EMail, $Smtp, $Port, $SSL)
      85. $Text = "Server war|Offline|" & $Datum_Anderung & $Datum ;Ausgabetext
      86. FileWriteLine($File, $Text & @CRLF) ;Ausgabe speichern
      87. Else
      88. Call("_Mail", $Benutzername, $Passwort, $Server & " ist Offline gegangen", $EMail, $Smtp, $Port, $SSL)
      89. $Text = "Server war|Online|" & $Datum_Anderung & $Datum ;Ausgabetext
      90. FileWriteLine($File, $Text & @CRLF) ;Ausgabe speichern
      91. EndIf
      92. EndIf
      93. EndFunc ;==>_Schreiben
      94. Func _Ende()
      95. $Datum = Call("_Datum") ;Führt Datum aus
      96. If $Ping Then ;ping ausführen
      97. FileWriteLine($File, "Ping beendet Status:|Online" & "|" & $Datum & @CRLF) ;positiv
      98. Else
      99. FileWriteLine($File, "Ping beendet Status:|Offline" & "|" & $Datum & @CRLF);negativ
      100. EndIf
      101. Exit
      102. EndFunc ;==>_Ende
      103. Func _Ziel_Status()
      104. $Datum = Call("_Datum") ;Führt Datum aus
      105. If $CmdLine[0] < 1 Then Exit
      106. $string = $CmdLine[1] ;Adresse in string speichern
      107. $stringsplit = StringSplit($string, "|") ;string splitten
      108. $Kunde = $stringsplit[1] ;Kunde in Variable schreiben
      109. $Beschreibung = $stringsplit[2] ;Beschreibung in Variable schreiben
      110. $IP = $stringsplit[3] ;IP in Variable schreiben
      111. $Timeout = $stringsplit[4] ;Timeout in Variable schreiben
      112. $Benutzername = $stringsplit[5] ;Benutzername in Variable schreiben
      113. $Passwort = $stringsplit[6] ;Passwort in Variable schreiben
      114. $EMail = $stringsplit[7] ;EMail in Variable schreiben
      115. $Smtp = $stringsplit[8] ;Smtp in Variable schreiben
      116. $Port = $stringsplit[9] ;Port in Variable schreiben
      117. $SSL = $stringsplit[10] ;SSL in Variable schreiben
      118. $Nummer = $stringsplit[11] ;Nummer in Variable schreiben
      119. $Intervall = $stringsplit[12] ;Intervall in Variable schreiben
      120. $First = $stringsplit[13] ;In Variable schreiben ob Programm schon gelaufen ist
      121. If $stringsplit[0] = 15 Then
      122. $Status = $stringsplit[14] ;Status in Variable schreiben
      123. $Status_Anderung = $stringsplit[15] ;Statusänderung in Variable schreiben
      124. $Restart = $CmdLine[1] ;CmdLine in Restart schreiben
      125. $Restart = StringTrimRight($Restart, 4) ;Restart kürzen
      126. EndIf
      127. If $First <> "" Then
      128. $FirstRun = 1
      129. Else
      130. $FirstRun = 0
      131. $Restart = $CmdLine[1] & "1" ;CmdLine FirstRun auf 1 setzen
      132. EndIf
      133. If $SSL <> "" Then
      134. $SSL = 1
      135. Else
      136. $SSL = 0
      137. EndIf
      138. $Status_output = @ScriptDir & "\Status.ini" ;hier wird der Status gespeichert
      139. If FileExists(@ScriptDir & "\Protokolle\") Then ;wenn der Ordner existiert soll nichts gemacht werden
      140. Else
      141. DirCreate(@ScriptDir & "\Protokolle") ;wenn nicht soll er erstellt werden
      142. EndIf
      143. $Server = $Kunde & "." & $Beschreibung & "(" & $IP & ")"
      144. $File = @ScriptDir & "\Protokolle\" & $Server & ".txt"
      145. $Server = "Kunde: " & $Kunde & @CRLF & "Beschreibung: " & $Beschreibung & @CRLF & "IP: " & $IP ;File Name
      146. While 1
      147. $Zahler = $Zahler + 1
      148. If $Zahler > 2500 Then
      149. $Restart &= "|" & $Status & "|" & $Status_Anderung ;Status, Statusänderung hinzufügen
      150. Run('"' & @ScriptDir & '\Ping.exe " "' & $Restart & '"') ;Script neu starten
      151. Sleep(100)
      152. Exit
      153. EndIf
      154. If $t <> 0 Then ;beim ersten ausführen nicht ausführen
      155. Sleep($Intervall)
      156. EndIf
      157. $t = 1
      158. $Ping = Ping($IP, $Timeout);Pingt
      159. If $FirstRun = 0 Then ;beim ersten durchlauf ausführen
      160. Call("_FirstRun") ;erster durchlauf
      161. EndIf
      162. If $Ping Then ;wenn ping true ist
      163. Call("_Status_Anderung", 1) ;positiv aufruf
      164. Else ;wenn ping false ist
      165. Call("_Status_Anderung", 2) ;negativ aufruf
      166. EndIf
      167. _FileReadToArray($Ende, $Stop)
      168. If $Stop[1] = 1 Then ;leitet exit Sequenz ein
      169. $Datum = Call("_Datum") ;Führt Datum aus
      170. If $Status_End2 = $Status Then ;wenn die Netzwerkverbindung getrennt war
      171. $Letzte_Ping = $Datum
      172. FileDelete($Status_output)
      173. FileWriteLine($Status_output, "Online")
      174. $Letzte_Ping = StringSplit($Letzte_Ping, "|")
      175. FileDelete($Ping_output)
      176. FileWriteLine($Ping_output, $Letzte_Ping[2])
      177. $Text = "Server war|Offline|" & $Datum_Anderung & $Datum ;Ausgabetext
      178. FileWriteLine($File, $Text & @CRLF) ;Ausgabe speichern
      179. Call("_Ende")
      180. ElseIf $Status_End1 = $Status Then ;wenn die Netzwerkverbindung bestand
      181. $Letzte_Ping = $Datum
      182. FileDelete($Status_output)
      183. FileWriteLine($Status_output, "Offline")
      184. $Letzte_Ping = StringSplit($Letzte_Ping, "|")
      185. FileDelete($Ping_output)
      186. FileWriteLine($Ping_output, $Letzte_Ping[2])
      187. $Text = "Server war|Online|" & $Datum_Anderung & $Datum ;Ausgabetext
      188. FileWriteLine($File, $Text & @CRLF) ;Ausgabe speichern
      189. Call("_Ende")
      190. EndIf
      191. ExitLoop
      192. EndIf
      193. WEnd
      194. EndFunc ;==>_Ziel_Status


      Mail Code:
      Spoiler anzeigen

      AutoIt-Quellcode

      1. #cs --------------------------------------------------------------------------------------------------------
      2. Name: mail
      3. Description: Send Mails
      4. Author: Jos
      5. Changed by I3asti
      6. Added _Mail($Name, $Password, $Body, $ToAddress, $SmtpServer) Function
      7. #ce --------------------------------------------------------------------------------------------------------
      8. ;##################################
      9. ; Include
      10. ;##################################
      11. #include "file.au3"
      12. ;##################################
      13. ; Variables
      14. ;##################################
      15. $Subject = "Server-Ping" ; subject from the email - can be anything you want it to be
      16. $AttachFiles = "" ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
      17. $CcAddress = "" ; address for cc - leave blank if not needed
      18. $BccAddress = "" ; address for bcc - leave blank if not needed
      19. $Importance = "Normal" ; Send message priority: "High", "Normal", "Low"
      20. ;~ $IPPort = 25 ; port used for sending the mail
      21. ;~ $ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS
      22. ;~ $IPPort = 465 ; GMAIL port used for sending the mail
      23. ;~ $ssl = 1 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS
      24. ;##################################
      25. ; Script
      26. ;##################################
      27. Global $oMyRet[2]
      28. Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
      29. Func _Mail($Username, $Password, $Body, $ToAddress, $SmtpServer, $IPPort, $ssl)
      30. $FromName = $Username ; name from who the email was sent
      31. $stringsplit = StringSplit($Username,"@")
      32. $Username = $stringsplit[1]
      33. $FromAddress = $Username & "@ping.de" ; address from where the mail should come
      34. $mail = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
      35. EndFunc ;==>_Mail
      36. ; The UDF
      37. Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
      38. Local $objEmail = ObjCreate("CDO.Message")
      39. $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
      40. $objEmail.To = $s_ToAddress
      41. Local $i_Error = 0
      42. Local $i_Error_desciption = ""
      43. If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
      44. If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
      45. $objEmail.Subject = $s_Subject
      46. If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
      47. $objEmail.HTMLBody = $as_Body
      48. Else
      49. $objEmail.Textbody = $as_Body & @CRLF
      50. EndIf
      51. If $s_AttachFiles <> "" Then
      52. Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
      53. For $x = 1 To $S_Files2Attach[0]
      54. $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
      55. ;~ ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
      56. If FileExists($S_Files2Attach[$x]) Then
      57. ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
      58. $objEmail.AddAttachment($S_Files2Attach[$x])
      59. Else
      60. ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
      61. SetError(1)
      62. Return 0
      63. EndIf
      64. Next
      65. EndIf
      66. $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
      67. $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
      68. If Number($IPPort) = 0 Then $IPPort = 25
      69. $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
      70. ;Authenticated SMTP
      71. If $s_Username <> "" Then
      72. $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
      73. $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
      74. $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
      75. EndIf
      76. If $ssl Then
      77. $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
      78. EndIf
      79. ;Update settings
      80. $objEmail.Configuration.Fields.Update
      81. ; Set Email Importance
      82. Switch $s_Importance
      83. Case "High"
      84. $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "High"
      85. Case "Normal"
      86. $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Normal"
      87. Case "Low"
      88. $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Low"
      89. EndSwitch
      90. $objEmail.Fields.Update
      91. ; Sent the Message
      92. $objEmail.Send
      93. If @error Then
      94. SetError(2)
      95. Return $oMyRet[1]
      96. EndIf
      97. $objEmail = ""
      98. EndFunc ;==>_INetSmtpMailCom
      99. ;
      100. ;
      101. ; Com Error Handler
      102. Func MyErrFunc()
      103. $HexNumber = Hex($oMyError.number, 8)
      104. $oMyRet[0] = $HexNumber
      105. $oMyRet[1] = StringStripWS($oMyError.description, 3)
      106. ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
      107. SetError(1); something to check for when this function returns
      108. Return
      109. EndFunc ;==>MyErrFunc


      vll hat ja noch jemand Verbesserungsvorschläge :D
      Mfg I3asti

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „I3asti“ ()

      Falls jemand mal kurz Zeit hätte ich komm net drauf. Ich habe das Programm über das Wochenende auf der Arbeit laufen lassen und als ich heute früh danach geschaut habe war es aus ohne Fehlermeldung, auch nichts in den Ereignisprotokollen. :huh: Ich habe es jetzt nochmal gestartet und lasse es laufen um zu schauen ob das Problem wieder kommt.
      Mfg I3asti

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „I3asti“ ()

      Mahlzeit,

      mein "Dauerping" ist ja nur die Ping-Funktion von Autoit in einer Schleife, wenn du das beenden willst musst du einfach nur die Schleife beenden.

      Wie startest du deinen Dauerping? Strg + c funktioniert ja nur in der Konsole wenn du deinen Dauerping mit ping -t laufen lässt.
      Mfg I3asti
      in meinem Tool arbeite ich grad mit Konsolen-Befehlen

      Spoiler anzeigen


      AutoIt-Quellcode

      1. Func pinging()
      2. Local $foo = Run(@ComSpec & " /c ping "&GUICtrlRead($IP_Input[0])&"."&GUICtrlRead($IP_Input[1])&"."&GUICtrlRead($IP_Input[2])&"."&GUICtrlRead($IP_Input[3]), @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
      3. Local $line
      4. While 1
      5. $line = $line&StdoutRead($foo)
      6. If @error Then ExitLoop
      7. GUICtrlSetData($iMemo, $line)
      8. Sleep(250)
      9. Wend
      10. While 1
      11. $line = StderrRead($foo)
      12. If @error Then ExitLoop
      13. MsgBox(0, "STDERR read:", $line)
      14. Wend
      15. EndFunc






      Den Dauerping habe ich nun mit nem Hotkey zum stoppen gebracht.

      Spoiler anzeigen

      AutoIt-Quellcode

      1. Func pinging2()
      2. HotKeySet("{F1}", "PingEnde")
      3. While 1
      4. if $Ping == 1 Then
      5. Local $foo = Run(@ComSpec & " /c ping "&GUICtrlRead($IP_Input[0])&"."&GUICtrlRead($IP_Input[1])&"."&GUICtrlRead($IP_Input[2])&"."&GUICtrlRead($IP_Input[3]), @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
      6. Local $line
      7. While 1
      8. $line = $line&StdoutRead($foo)
      9. If @error Then ExitLoop
      10. GUICtrlSetData($iMemo, $line)
      11. Sleep(250)
      12. Wend
      13. While 1
      14. $line = StderrRead($foo)
      15. If @error Then ExitLoop
      16. MsgBox(0, "STDERR read:", $line)
      17. Wend
      18. Else
      19. ExitLoop
      20. GUISetState()
      21. EndIf
      22. WEnd
      23. ;MsgBox(0, "Debug", "Exiting...")
      24. EndFunc
      25. Func PingEnde()
      26. $Ping = 0
      27. EndFunc




      Arbeite grad an der Abfrage für wenn Computername -> leer dann frag IP ab, wenn die leer dann MsgBox "geben sie eines von beidem ein"...

      Versuche mich grad so in AutoIt reinzufuddeln, hab bisher immer nur mit Java programmiert und will mir jetzt eine Admin-Erleichterung basteln
    autoit.de Webutation