|
You last visited: Today at 11:56
Advertisement
Problem mit Checkbox
Discussion on Problem mit Checkbox within the AutoIt forum part of the Coders Den category.
08/05/2011, 21:51
|
#1
|
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
|
Problem mit Checkbox
Hallo Leute,
ich hab ein Programm geschrieben, dass die aktuelle IP alle x Minuten ausließt und in einer txt speichert.
Es soll auch im Hintergrund gestartet werden können, aber ich hab Probleme mit der Checkbox: sie verändert sich nicht, wenn man draufklickt...
PHP Code:
#include <ButtonConstants.au3>
#include "INet.au3"
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <File.au3>
HotKeySet("^+{END}", "Terminate")
HotKeySet("^+{HOME}", "Pause")
Dim $file[4]
Dim $Minuten1[2]
$pause = False
_FileReadToArray("config.txt", $file)
$Form2 = GUICreate("IP", 335, 262, 302, 218)
$Pfad = GUICtrlCreateInput($file[1], 136, 24, 121, 21)
$Button1 = GUICtrlCreateButton("Save n' Go", 184, 200, 123, 25)
$Label1 = GUICtrlCreateLabel("IP hier speichern:", 32, 24, 86, 17)
$Label2 = GUICtrlCreateLabel("Alle", 32, 96, 21, 17)
$Minuten = GUICtrlCreateInput($file[2], 64, 96, 121, 21)
$Label3 = GUICtrlCreateLabel(" Minuten aktualisieren.", 185, 96, 140, 17)
$Button2 = GUICtrlCreateButton("IP aktualisieren", 32, 200, 99, 25)
$start = GUICtrlCreateCheckbox("Start in background?", 184, 180)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
If $file[3] = "1" Then ;setzt die Checkbox auf den in der config.txt gespeicherten Wert
GUICtrlSetState($start,$GUI_Checked)
Else
GUICtrlSetState($start,$GUI_Unchecked)
EndIf
If $file[3] = "1" Then
GUISETSTATE(@SW_HIDE)
IP()
EndIf
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button2
$file = FileOpen($file[1], 2)
$ip = _GetIP()
FileWrite($file, $ip)
Case $Button1
IP()
EndSwitch
WEnd
Func IP()
$config = FileOpen("config.txt", 2) ;speichert die Einstellungen
$config = FileOpen("config.txt", 1)
FileWrite($config, GuiCtrlRead($Pfad) & @CRLF)
FileWrite($config, GuiCtrlRead($Minuten) & @CRLF)
If GUICtrlRead($start = $GUI_Checked) Then
FileWrite($config, "1")
Else
FileWrite($config, "0")
EndIf
GUISETSTATE(@SW_HIDE)
_FileReadToArray("config.txt", $file)
$time = $file[2] * 10000
While 1
$file1 = FileOpen($file[1], 2) ;speichert die IP
$ip = _GetIP()
FileWrite($file1, $ip)
If $pause = True Then ;kontrolliert ob das Skript pausiert wurde
ExitLoop ;ja ich war zu faul eine Schleife einzubauen :D
EndIf
Sleep($time)
If $pause = True Then
ExitLoop
EndIf
Sleep($time)
If $pause = True Then
ExitLoop
EndIf
Sleep($time)
If $pause = True Then
ExitLoop
EndIf
Sleep($time)
If $pause = True Then
ExitLoop
EndIf
Sleep($time)
If $pause = True Then
ExitLoop
EndIf
Sleep($time)
WEnd
EndFunc
Func Terminate() ;beenden per Strg+Shift+POS1
Exit
EndFunc
Func Pause() ;pausieren mit Strg+Shift+ENDE
GUISETSTATE(@SW_SHOW)
$pause = True
EndFunc
|
|
|
08/05/2011, 22:08
|
#2
|
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
|
PHP Code:
If GUICtrlRead($start)= $GUI_CHECKED Then FileWrite($config, "1") Else FileWrite($config, "0") EndIf
|
|
|
08/05/2011, 22:19
|
#3
|
elite*gold: 0
Join Date: Mar 2011
Posts: 8,645
Received Thanks: 3,454
|
oder so
PHP Code:
$a = GUICtrlRead($start) If $a = 1 Then FileWrite($config, "1") Else FileWrite($config, "0") EndIf
|
|
|
08/05/2011, 22:55
|
#4
|
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
|
Das wars leider nicht  ich kann die Box immer noch nicht anklicken...
Edit: Kommt das evtl. durch
PHP Code:
If $file[3] = "1" Then GUICtrlSetState($start,$GUI_Checked) Else GUICtrlSetState($start,$GUI_Unchecked) EndIf
, dass die Box den Wert immer beibehalten will?
Aber wie bekomm ich es dann hin, dass sie den vorher gespeicherten Wert wieder hat?
|
|
|
08/05/2011, 22:56
|
#5
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
|
Dein Lösungsweg lässt doch zu wünschen übrig. Die Lösung mit der 2. Dauerschleife und den vielen Sleeps die zudem noch enorm hoch ausfallen können ist schlichtweg zu schlecht. Ich finde das ganze Script schlecht, möchte jetzt aber nicht auf jede Kleinigkeit eingehen.
Ich habe mal eine bessere Lösung erstellt, diese kannst du ja nach deinen Wünschen ausbauen:
PHP Code:
#include <GUIConstantsEx.au3>
#include <INet.au3>
Global $Timer, $bSaveIP = True
GUICreate("KD", 100, 50)
$Button = GUICtrlCreateButton("Start", 0, 0, 100, 25)
$Checkbox = GUICtrlCreateCheckbox("Hintergrund", 5, 25, 90, 25)
GUICtrlSetState(-1, IniRead("Settings.ini", "Checkbox", "State", $GUI_UNCHECKED))
If BitAND(GUICtrlRead($Checkbox), $GUI_UNCHECKED) Then
$bSaveIP = False
GUISetState()
EndIf
Do
$Msg = GUIGetMsg()
If $Msg == $Button Then
$Timer = 0
$bSaveIP = Not $bSaveIP
If $bSaveIP Then
GUICtrlSetData($Button, "Stopp")
Else
GUICtrlSetData($Button, "Start")
EndIf
ElseIf $Msg == $Checkbox Then
$State = GUICtrlRead($Checkbox)
IniWrite("Settings.ini", "Checkbox", "State", $State)
If BitAND($State, $GUI_CHECKED) Then GUISetState(@SW_HIDE)
EndIf
If $bSaveIP Then
If TimerDiff($Timer) >= 10 * 60 * 1000 Then ;10 Minuten
FileWrite("IPList.txt", @MDAY & "." & @MON & "." & @YEAR & " " & _
@HOUR & ":" & @MIN & ":" & @SEC & " IP Adresse: " & _GetIP() & @CRLF)
$Timer = TimerInit()
EndIf
EndIf
Sleep(50)
Until $Msg == $GUI_EVENT_CLOSE
Zu deinem Fehler:
PHP Code:
If $file[3] = "1" Then
GUICtrlSetState($start,$GUI_Checked)
Else
GUICtrlSetState($start,$GUI_Unchecked)
EndIf
Das hat ohne Abfrage NICHTS in der Schleife verloren.
Haja, bist ja schon selbst drauf gekommen.
|
|
|
08/05/2011, 23:30
|
#6
|
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
|
Deine Lösung ist in der Tat wesentlich eleganter
Ich werd mich morgen mal weiter reinarbeiten, danke dir
|
|
|
08/06/2011, 09:58
|
#7
|
elite*gold: 0
Join Date: Aug 2011
Posts: 19
Received Thanks: 1
|
|
|
|
08/06/2011, 14:21
|
#8
|
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,255
|
Quote:
Originally Posted by ~>Kredar<~
|
Threadtitle sollen so gewählt werden, dass man erkennt um was für ein Problem es sich handelt. "Problem mit Checkbox" also sieht man, dass es sich um eine Checkbox handelt.
Was man bei deinem Threadtitle nicht sagen kann:
Lern lieber AutoIt, da du anscheinend mit deinem C&P nicht weit gekommen bist. Schaust du hier:
|
|
|
08/06/2011, 14:32
|
#9
|
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
|
Naja die Grundlagen aus den Tutorial gehen nicht sehr weit, damit kann man nicht sehr viel machen. Ich schreibe das Programm grad nochmal neu und versuche das von KillerDeluxe geschreibene einzubauen.
|
|
|
08/06/2011, 15:31
|
#10
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
|
Wofür was neues erstellen? Ein Input hätte gereicht:
PHP Code:
#include <GUIConstantsEx.au3>
#include <INet.au3>
Global $Timer, $bSaveIP = True
GUICreate("KD", 110, 75)
$B_Start = GUICtrlCreateButton("Start", 0, 0, 110, 25)
GUICtrlCreateLabel("Alle", 5, 33, 20, 17)
$I_Delay = GUICtrlCreateInput("10", 30, 30, 30, 21)
GUICtrlCreateLabel("Minuten", 65, 33, 40, 17)
$C_Background = GUICtrlCreateCheckbox("im Hintergrund", 5, 50, 100, 25)
GUICtrlSetState(-1, IniRead("Settings.ini", "Checkbox", "State", $GUI_UNCHECKED))
If BitAND(GUICtrlRead($C_Background), $GUI_UNCHECKED) Then
$bSaveIP = False
GUISetState()
EndIf
Do
$Msg = GUIGetMsg()
If $Msg == $B_Start Then
$Timer = 0
$bSaveIP = Not $bSaveIP
If $bSaveIP Then
GUICtrlSetData($B_Start, "Stopp")
Else
GUICtrlSetData($B_Start, "Start")
EndIf
ElseIf $Msg == $C_Background Then
$State = GUICtrlRead($C_Background)
IniWrite("Settings.ini", "Checkbox", "State", $State)
If BitAND($State, $GUI_CHECKED) Then GUISetState(@SW_HIDE)
EndIf
If $bSaveIP Then
If TimerDiff($Timer) >= GUICtrlRead($I_Delay) * 60 * 1000 Then
FileWrite("IPList.txt", @MDAY & "." & @MON & "." & @YEAR & " " & _
@HOUR & ":" & @MIN & ":" & @SEC & " IP Adresse: " & _GetIP() & @CRLF)
$Timer = TimerInit()
EndIf
EndIf
Sleep(50)
Until $Msg == $GUI_EVENT_CLOSE
|
|
|
08/06/2011, 16:34
|
#11
|
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
|
Soooo, bin fast fertig^^
PHP Code:
#include <GUIConstantsEx.au3>
#include <INet.au3>
Global $Timer, $SaveIP = False
GUICreate("IP", 335, 262)
$Label1 = GUICtrlCreateLabel("IP hier speichern:", 32, 24)
$Label2 = GUICtrlCreateLabel("Alle", 32, 90)
$Label3 = GUICtrlCreateLabel(" Minuten aktualisieren.", 185, 90)
$Label4 = GUICtrlCreateLabel("Status:", 32, 160)
$Label5 = GUICtrlCreateLabel("1", 80, 160,145,50)
$Pfad = GUICtrlCreateInput(IniRead("Settings.ini", "Pfad", "Path", "IP.txt"), 125, 21, 170, 21)
$Minuten = GUICtrlCreateInput(IniRead("Settings.ini", "Minuten", "Minuten", "10"), 60, 86, 121, 21)
$Button1 = GUICtrlCreateButton("Start", 230, 230, 90, 25)
$Button2 = GUICtrlCreateButton("Speichern", 120, 230, 90, 25)
$Button3 = GUICtrlCreateButton("Aktualisieren", 10, 230, 90, 25)
$Checkbox = GUICtrlCreateCheckbox("Hintergrund", 125, 200, 90, 25) ;startet das programm im hintergrund, bzw lässt es nach button2 im hintergrund laufen
GUICtrlSetState(-1, IniRead("Settings.ini", "Checkbox", "State", $GUI_UNCHECKED))
$tVordergrund = TrayCreateItem("Vordergrund")
AutoItSetOption("TrayAutoPause",0)
If IniRead("Settings.ini", "Checkbox", "State", $GUI_UNCHECKED) = 1 Then
$SaveIP = True
$Timer = 0
GUICtrlSetData($Button1, "Stopp")
Else
GUISetState()
EndIf
Do
$Msg = GUIGetMsg()
$tMsg = TrayGetMsg()
If $Msg == $Button1 Then ;ip aktualisieren starten
If $SaveIP Then ;wenn es gestartet ist, wird start zu stopp
GUICtrlSetData($Button1, "Stopp")
GUICtrlSetData($Label5, "Stopped") ;status
Else
GUICtrlSetData($Button1, "Start")
GUICtrlSetData($Label5, "Starting") ;status
EndIf
If GUICtrlRead($Checkbox) == $GUI_Checked Then ;programm geht in den hintergrund
GUISetState(@SW_HIDE)
EndIf
$Timer = 0 ;startet den timer für die regelmäßige kontrolle
$SaveIP = Not $SaveIP ;schaltet zwischen ip soll gespeichert werden und "pause" hin und her
ElseIf $Msg == $Button2 Then ;alles in ini speichern
$State = GUICtrlRead($Checkbox)
IniWrite("Settings.ini", "Checkbox", "State", $State)
$Pfad1 = GuiCtrlRead($Pfad)
IniWrite("Settings.ini", "Pfad", "Path", $Pfad1)
$Minuten1 = GuiCtrlRead($Minuten)
IniWrite("Settings.ini", "Minuten", "Minuten", $Minuten1)
ElseIf $Msg == $Button3 Then ;einmal aktualisieren
$ip = _GetIP()
FileOpen (IniRead("Settings.ini", "Pfad", "Path", "IP.txt"), 2)
FileWrite(IniRead("Settings.ini", "Pfad", "Path", "IP.txt"), $ip)
GUICtrlSetData($Label5, "Zuletzt aktualisiert: " & @HOUR & ":" & @MIN & ":" & @SEC) ;status
ElseIf $SaveIP Then ;regelmäßiges aktualisieren der txt
$status = Round(TimerDiff($Timer)/60/1000,2)
$next = Round(IniRead("Settings.ini", "Minuten", "Minuten", "10") - TimerDiff($Timer)/60/1000,2)
GUICtrlSetData($Label5, "Aktualisiert vor " & $status & " Minuten" &" Nächste in " & $next &" Minuten") ;status
If TimerDiff($Timer) >= IniRead("Settings.ini", "Minuten", "Minuten", "10") * 60 * 1000 Then
$ip = _GetIP()
FileOpen (IniRead("Settings.ini", "Pfad", "Path", "IP.txt"), 2)
FileWrite(IniRead("Settings.ini", "Pfad", "Path", "IP.txt"), $ip)
$Timer = TimerInit()
EndIf
ElseIf $tMsg == $tVordergrund Then ;traymenü
GUISetState(@SW_SHOW)
EndIf
Sleep(50)
Until $Msg == $GUI_EVENT_CLOSE
Zwei Fragen:
Wieso verwendest du kein While 1 Switch Case... für die Buttons? So hab ich es in bisher jedem Beispiel gesehen.
Wieso Funktioniert das mit dem Traymenü nciht richtig? (es passiert nichts, wenn ich auf "Vordergrund" klicke) In der Hilfe ist es mit While 1 Select Case... gemacht, lässt sich das nicht einfach in deine Version einbauen?
lg und schonmal danke :P
keks
|
|
|
08/06/2011, 17:37
|
#12
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
|
Natürlich, bei einem oder zwei Controls benutze ich aber meistens If-Abfragen und eine Do-Schleife. Prinzipiell ist das aber egal.
|
|
|
08/06/2011, 19:11
|
#13
|
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
|
So Programm ist fertig. Danke ncohmal für die Hilfe
Für alle die es wissen wollen: Ich habe
PHP Code:
Select Case $tMsg = $tVordergrund ;traymenü
$show = Not $show If $show = True Then GUISetState(@SW_SHOW) TrayItemSetState($tVordergrund,$TRAY_CHECKED) Else GUISetState(@SW_HIDE) TrayItemSetState($tVordergrund,$TRAY_UNCHECKED) EndIf
EndSelect
in die Do Schleife eingefügt, und an entsprechenden Stellen die Variable... geändert.
Die Variable musste ich einfügen, da es mit TrayItemGetState() nicht 100% funktioniert hat.
|
|
|
 |
Similar Threads
|
Checkbox abfragen
11/06/2010 - AutoIt - 24 Replies
Hi liebe Com.,
Da ich mit der Suchfunktion nichts passendes gefunden habe, frage ich euch...:
wie kann ich in diesem Skript:
$Form1 = GUICreate("SpammBot by Laex", 290, 94, 192, 120)
GUICtrlCreateLabel("Was willst du Spammen?",8,8)
$Text = GUICtrlCreateInput("", 8, 24, 185, 21)
$Button1 = GUICtrlCreateButton("LOS SPAMMEN...", 8, 48, 185, 41, $WS_GROUP)
$Checkbox1 = GUICtrlCreateCheckbox("Mit Enter", 200, 3, 89, 57)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
|
checkbox in rls bereich
09/20/2010 - Main - 0 Replies
ich weiß nicht ob das jetzt "erlaubt" ist nach zufragen
egal wenn nicht > close plawks^^
wenns hier falsch gepostet ist dann pls move^^
und sry wegen meiner rechtschreibung :(
ich habe im crossfire forum was auch wahrscheinlich in den aderen foren sein wird gesehn das man eine checkbox anklicken muss um ein thread erstellen zu können. ich spiele 2 online games (maplestory, crossfire) natürlich bin ich auch in einem guten maplestory hack forum angemeldet und ich muss feststellen das...
|
Checkbox Hilfe!
09/11/2010 - AutoIt - 6 Replies
Hallo ich brauche schnell eure hilfe...
Ich schreibe einen Trainer und möchte,
dass wenn z.B.
$Checkbox14 angekreuzt ist,
$Checkbox15 nicht angekreuzt ist.
und wenn dann
|
Help-CheckBox zuweisen!
11/29/2009 - AutoIt - 13 Replies
Hallo Leute
ich hab mal wieder ne Frage xD
Also, ich wollte mal mit AutoIT ein Programm schreiben für mich und meine freunde und so, dass wenn sie den Pc neumachen das dieses Programm halt die wichtigsten bzw. auch guten Programme automatisch insterliert.
Das mit dem Automatisch insterlieren war ja kein Problem für mich, doch wie mache ich es das er jetzt z.b. anklickt das er Antivir haben will und Firfox, dass er die nacheinander Insterliert.
Also hier noch mal mehr Infos.
Wenn er jetzt...
|
checkbox auslesen ?
05/27/2009 - AutoIt - 3 Replies
Hey,
brauche hilfe da weder search hier im forum noch au3 help was ausgespuckt hat
wie bekomme ich checkbox ausgelesen (vieleicht so wie $radio??) sodas ich diese dann in eine if/else reinpacken kann
hier mal ansatz
//Edit:so habe es hinbekommen aber wie packe ich diese nun in eine if/else also das wenn z.b. alle 3 ausgewählt sind er auch alle 3 ausführt?
danke euch schonmal ;D
|
All times are GMT +1. The time now is 11:57.
|
|