Liebe Autoit-Gemeinde! Ich habe versucht, mein Grundprogramm (Überprüfung des Übertragungsvolumens) um eine GUI und einen Timer zu erweitern. Leider weiß ich nicht, ob man die GUI als Func einbindet und wenn ja, wie man einen Countdown erstellt.
Problem: Die GUI soll nur aktualisiert werden. Im Moment wird aber eine weitere Instanz gestartet.
Vielen Dank im Voraus!
EDIT: aktualisierte Fassung unten.
Spoiler anzeigen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs => um mehrere Zeilen auszukommentieren
Trafficlimit-Projekt
To Do:
überprüfung ob das Netzwerkkabel steckt
Deaktivierung der Netzwerkkarte für winxp, für vista: keine Ahnung
#ce
#include <IE.au3>
#include <array.au3>
#Include <Constants.au3>
#NoTrayIcon ; Trayicon erstmal verstecken
#include<EditConstants.au3>
#include<StaticConstants.au3>
#include<GUIConstantsEx.au3>
#include<WindowsConstants.au3>
Global $schwellenwert = 1.950000
Global $grenze1 = 1.400000;hier die variablen definieren,
Global $grenze2 = 1.800000;Local gilt hier nur als defaultwert, kann mit global über menü überschrieben werden
Global $grenze3 = 1.900000
Global $sleeptime0 = 1
Global $sleeptime1 = 90 ; in Min
Global $sleeptime2 = 30; = 30 Min
Global $sleeptime3 = 5;5 Min
Global $traffic = 0
Global $Minutes
Global $hShadow, $hGui, $sTitle
;ab hier Schleife
While 1=1 ; wenn der Ausdruck immer wahr ist: dann wie hier endlos
; hier stehen die Befehle,
; die immer wieder ausgefuehrt
; werden sollen
check()
Select ; Wartezeit bestimmen
Case $traffic >= $schwellenwert
Ueberschreitung ()
Case $traffic >= $grenze3
$Minutes = $sleeptime3
Sleep (20)
Case $traffic >= $grenze2
$Minutes = $sleeptime2
Sleep (20)
Case $traffic >= $grenze1
$Minutes = $sleeptime1
Sleep (20)
Case $traffic < $grenze1
$Minutes = $sleeptime0
Case Else
Fehler()
EndSelect
;MsgBox(64, "Info", "$Minutes ist:" & $Minutes & " ")
AusgabeimFenster () ;Im Fenster ausgeben
warten()
sleep (20)
WEnd
;--------------------------
Func warten ()
;Time Machine #1
;Minutes/seconds/miliseconds
; Author - Valuater
[/autoit] [autoit][/autoit] [autoit];$Minutes = 90 ; will wait 90 minutes: das hier löschen
[/autoit] [autoit][/autoit] [autoit]Global $60Count = 0, $begin = TimerInit()
While $Minutes > $60Count
$dif = TimerDiff($begin)
$dif2 = StringLeft($dif, StringInStr($dif, ".") -1)
$Count = int($dif/1000)
$60Count = Int($Count / 60)
;ToolTip("Minuten bis zur nächsten Traffic-Überprüfung = " & $Minutes & @CRLF & "Minuten vergangen = " & $60Count & @CRLF & "Sekunden vergangen = " & $Count & @CRLF & "Mili-Sekunden = " & $dif2, 20, 20, "Time Machine #1", 1)
;TrayTip("Traffic-Info", "Internetkontingent-Information " & $Uhrzeit, "Aktuell sind: " & $traffic & " Gbyte verbraucht", 5)
;AusgabeimFenster () ;Im Fenster ausgeben
Sleep(20);Prozessorentlastung in Endlosschleife
WEnd
;MsgBox(64, "Time-Up!!", "Your " & $Minutes & " minutes have passed")
;sleep (20)
EndFunc
;------------------------------
Func check ();Funktion die einmal den Traffic ausliest
Local $url = 'http://statistik.uni-trier.de/monatsstat.php'
Local $oIE = _IECreate($url, 0, 0)
Local $oTable = _IETableGetCollection($oIE, 0)
Local $array = _IETableWriteToArray($oTable, True) ; liest Tabelle in einen 2D-Array
;_ArrayDisplay($array) ; gibt Array auf dem Bildschirm aus -> Messagebox einfügen!
$traffic = $array[3][2];soll Gesamttraffic anzeigen: 4.Zeile (Zählung beginnt mit 0, 2.Spalte
$traffic = StringStripWS ( $traffic, 2 );entfernt Leerzeichen u.ä. am Anfang und Ende von $traffic (führt sonst zu Überspringen von if-Abfrage)
_IEQuit($oIE) ; schließt IE
sleep (20)
EndFunc
;-----------------------------
Func Ueberschreitung ()
MsgBox(16, "Achtung: Kontingent erschöpft! " & @HOUR & ":" & @MIN & ":" & @SEC & " Uhr", "Das Internetkontingent wurde erreicht." & @CR & @CR & _
"Aktuell: " & $traffic & " Gbyte" & @CR & "Das Netzwerkkabel ziehen wäre jetzt die einfachste Lösung ;-)")
sleep(20)
EndFunc
;----------------------------
Func Fehler ()
MsgBox(64, "Fehler", "Ein Fehler ist aufgetreten.")
sleep (20)
EndFunc
;----------------------------
; Ab hier kommt die GUI
Func AusgabeimFenster ()
Opt('GUIOnEventMode', 1) ; OnEventMode für die GUI
Opt('TrayOnEventMode', 1) ; OnEventMode für das Traymenü
Opt('TrayMenuMode', 1) ; Standard-Traymenü entfernen
$sTitle = 'Extended Tooltip'
$BgColor = 0xFFFFDF ; Hintergrundfarbe
$ShColor = 0x666666 ; Schattenfarbe
$Width = 320 ; Breite des Fensters
$Height = 200 ; Höhe des Fensters
$Left = Int(@DesktopWidth/2-$Width/2) ; Horizontale Position (zentriert)
$Top = Int(@DesktopHeight/2-$Height/2) ; Vertikale Position (zentriert)
$hGui = GUICreate($sTitle, $Width, $Height, $Left, $Top, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW) ; keine Titelleiste, kein Button in der Taskleiste
GUISetBkColor($BgColor) ; Hintergrundfarbe setzen
GUISetOnEvent($GUI_EVENT_CLOSE, '_End') ; [ESC] beendet das Programm
$hLabel = GUICtrlCreateLabel('', 0, 0, $Width, $Height, Default, $GUI_WS_EX_PARENTDRAG) ; Transparentes Label zum verschieben des Fensters
[/autoit] [autoit][/autoit] [autoit]$hHead = GUICtrlCreateLabel('', 10, 10, $Width-20, 30, $SS_CENTER, $GUI_WS_EX_PARENTDRAG) ; Ein Label für die Überschrift
GUICtrlSetFont(-1, 16, 600, 0, 'Arial') ; Größe und Zeichensatz der Überschrift setzen
$hText = GUICtrlCreateEdit('', 10, 45, $Width-20, $Height-60, BitOr($WS_VSCROLL, $ES_AUTOVSCROLL, $ES_READONLY), $WS_EX_TRANSPARENT) ; ein scrollbares Editfeld erstellen
GUICtrlSetBkColor(-1, $BgColor) ; Hintergrundfarbe setzen
GUICtrlSetState(-1, $GUI_ONTOP) ; Das Editfeld nach vorne holen, damit man scrollen kann
GUICtrlSetFont(-1, 10, 500, 0, 'Arial') ; Größe und Zeichensatz der Überschrift setzen
;$hCountdown = GUICtrlCreateEdit('', 10, 45, $Width-20, $Height-20, $WS_EX_TRANSPARENT) ; ein scrollbares Editfeld erstellenEin Label für den Countdown
;GUICtrlSetFont(-1, 10, 500, 0, 'Arial') ; Größe und Zeichensatz der Überschrift setzen
$hContextMenu = GUICtrlCreateContextMenu($hLabel) ; Kontextmenü erstellen
GUICtrlCreateMenuItem('Minimieren', $hContextMenu) ; Minimieren-Eintrag erstellen
GUICtrlSetOnEvent(-1, '_Minimize') ; dem Eintrag eine Funktion zuweisen
GUICtrlCreateMenuItem('Beenden', $hContextMenu) ; Beenden-Eintrag erstellen
GUICtrlSetOnEvent(-1, '_End') ; dem Eintrag eine Funktion zuweisen
TrayCreateItem('Wiederherstellen') ; Traymenüeintrag erstellen
TrayItemSetOnEvent(-1, '_Restore') ; dem Eintrag eine Funktion zuweisen
TrayCreateItem('Beenden') ; Traymenüeintrag erstellen
TrayItemSetOnEvent(-1, '_End') ; dem Eintrag eine Funktion zuweisen
$hShadow = GUICreate('Shadow', $Width, $Height, $Left+6, $Top+6, $WS_POPUP, $WS_EX_TOOLWINDOW) ; Schattenfenster erzeugen
GUISetBkColor($ShColor) ; Farbe des Schattens setzen
WinSetTrans($hShadow, '', 128) ; Transparenz des Schattens einstellen
GUISetState(@SW_SHOW, $hShadow) ; Schatten anzeigen
GUISetState(@SW_SHOW, $hGui) ; GUI anzeigen
WinSetOnTop('Shadow', '', 1) ; Schatten immer im Vordergrund
WinSetOnTop($sTitle, '', 1) ; GUI immer im Vordergrund
GUIRegisterMsg($WM_MOVE, '_ShadowMove') ; Funktion zum "Schatten verschieben" registrieren
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];Diese Variable möchte ich über mein Programm definieren.
;$msg = 'In der großen Koalition sorgt der Zank um die Novelle des Gesetzes für das Bundeskriminalamt (BKA) weiter für Unmut. Vor allem Bundesinnenminister Wolfgang Schäuble ist nach wie vor erzürnt über den Widerstand auch aus SPD-regierten Ländern gegen die vom Bundestag abgesegnete Ausweitung der BKA-Befugnisse einschließlich einer Lizenz für heimliche Online-Durchsuchungen.'
;$msg &= '"Die Führung der Partei kann ihre Entscheidungen derzeit nicht durchsetzen", klagte der CDU-Minister dem "Focus" sein Leid. Der Koalitionspartner befinde sich in einer "akuten Krise". Eine "Handvoll Jusos" in Sachsen könne das Inkrafttreten eines jahrelang beratenen Gesetzes verzögern, schimpfte Schäuble gegen das erste Nein eines Landes gegen das Vorhaben, in dem die Sozialdemokraten mit an der Macht sind.'
;GUICtrlSetData($hHead, 'Streit um BKA-Gesetz') ; Überschrift anzeigen
Global $Count, $60Count, $hShadow
Global $msg = @HOUR & ":" & @MIN & ":" & @SEC & " Uhr"
$msg &= @CRLF & @CRLF & "Aktuell sind: " ; Fensterinhalt definieren: Traffic und Verbleibende Minuten
$msg &= $traffic
$msg &= " Gbyte verbraucht."
$msg &= @CRLF & "Nächste Überprüfung in "
$msg &= $Minutes
$msg &= " Minuten."
GUICtrlSetData($hHead, "Internet-Kontingent") ; Überschrift anzeigen
GUICtrlSetData($hText, $msg) ; denText anzeigen
; Wie zeigt man einen Countdown an?
#cs While True ; Endlosschleife
Sleep(10) ; Prozessor entlasten
WEnd
#ce
EndFunc
;--------------------------------------------
Func _End()
Exit
EndFunc
Func _Minimize()
GUISetState(@SW_HIDE, $hShadow) ; Schatten verstecken
GUISetState(@SW_HIDE, $hGui) ; GUI verstecken
TraySetState(1) ; Trayicon anzeigen
EndFunc
Func _Restore()
GUISetState(@SW_SHOW, $hShadow) ; Schatten wiederherstellen
GUISetState(@SW_SHOW, $hGui) ; GUI wiederherstellen
TraySetState(2) ; Trayicon verstecken
EndFunc
Func _ShadowMove()
Local $pos = WinGetPos($sTitle) ; Fensterposition der GUI holen
WinMove('Shadow', '', $pos[0]+6, $pos[1]+6) ; das Schatten-Fenster entsprechend verschieben
EndFunc
Edit: Die Lösung in Kurzfassung steht im letzten Post.