EndSwitch Fehler

06/15/2013 17:41 Cpt.Cock#1
Hey,
ich habe momentan ein ziehmlich verkruckstes Problem. In meinem Script sind Switch und While Schleifen. Autoit meint ich hätte die Schleifen zu oft zugemacht. Wenn ich die "Zumacher" aber entferne, beschwert es sich weil sie fehlen O_O

Danke im Vorraus
monte

PS: Der Code:
PHP Code:
#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.8.0
Author
: myName

Script 
Function:
Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here

HotKeySet
("{F6}","stop")

#include <IE.au3>
#include <File.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=c:\users\julius\desktop\ytbot\ytbotgui.kxf
$Form1_1 = GUICreate("YTBot", 362, 424, 201, 122)
$eingabe = GUICtrlCreateInput("", 48, 40, 209, 21)
$Start = GUICtrlCreateButton("Start", 272, 24, 75, 25)
$Link = GUICtrlCreateLabel("Link", 8, 40, 24, 17)
$Edit1 = GUICtrlCreateEdit("", 8, 80, 345, 305)
GUICtrlSetData(-1, "")
$StartGeheim = GUICtrlCreateButton("StartGeheim", 272, 48, 75, 25)
$Progress1 = GUICtrlCreateProgress(0, 400, 358, 17)
$optionen = GUICtrlCreateButton("Optionen", 8, 0, 339, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###







While 1
$nMsg 
= GUIGetMsg()
Switch 
$nMsg
Case $GUI_EVENT_CLOSE
Exit
Case 
$Start
While 1
_write_log
($Edit1, "Versuch gestartet", $Form1_1)
_Log("Versuch gestartet")
For 
$i = 1 To 100 Step 1
GUICtrlSetData
($Progress1, $i)
Sleep(10)
Next
$oIE 
= _IECreate(GUICtrlRead($eingabe))
_write_Log($Edit1, "Link geöffnet", $Form1_1)
_Log("Link geöffnet")
For 
$i = 1 To 100 Step 2
GUICtrlSetData
($Progress1, $i)
Sleep(10)
Next
Sleep
(2000)
_IEQuit($oIE)
_write_log($Edit1, "Link geschlossen", $Form1_1)
_Log("Link geschlossen")
For 
$i = 1 To 100 Step 3
GUICtrlSetData
($Progress1, $i)
Sleep(10)
Next
For $i = 0 To 100 Step 4
GUICtrlSetData
($Progress1, $i)
Sleep(10)
Next
Sleep
(3000)
WEnd
Case $StartGeheim
While 1
_write_log
($Edit1, "Versuch gestartet", $Form1_1)
_Log("Versuch gestartet")
$oIE = _IECreate(GUICtrlRead($eingabe), 0 ,0)
_write_Log($Edit1, "Link geöffnet", $Form1_1)
_Log("Link geöffnet")
Sleep(2000)
_IEQuit($oIE)
_write_log($Edit1, "Link geschlossen", $Form1_1)
_Log("Link geschlossen")
Sleep(3000)
WEnd
Case $Optionen

#Region ### START Koda GUI section ### Form=c:\users\julius\desktop\ytbot\ytbotguioptions.kxf
$Form2 = GUICreate("Form2", 615, 438, 192, 124)
$Label1 = GUICtrlCreateLabel("Um den MultiView-Modus zu aktivieren, gib an weiviele Links es sind un klicke auf Starten", 8, 8, 428, 17)
$Button1 = GUICtrlCreateButton("Start-MultiView", 472, 32, 123, 33)
$Label2 = GUICtrlCreateLabel("Um die abzuarbeitenden Links zu editieren, sieh dir die MultiView.ini an.", 8, 40, 339, 17)
$Input1 = GUICtrlCreateInput("Anzahl Links", 472, 8, 121, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$linkanzahl = (GUICtrlRead($Input1))

While 
1
$nMsg 
= GUIGetMsg()
Switch 
$nMsg
Case $GUI_EVENT_CLOSE
Exit
Case 
$Button1
If $linkanzahl = 2 Then 
$eingabemulti 
= Iniread("MultiView.ini","Links","First","Error")
$oIE = _IECreate($eingabemulti)
$eingabemulti2 = Iniread("MultiView.ini","Links","Second","Error")
$oIE = _IECreate($eingabemulti2)
ElseIf

If 
$linkanzahl = 3 Then 
$eingabemulti 
= Iniread("MultiView.ini","Links","First","Error")
$oIE = _IECreate($eingabemulti)
$eingabemulti2 = Iniread("MultiView.ini","Links","Second","Error")
$oIE = _IECreate($eingabemulti2)
$eingabemulti3 = Iniread("MultiView.ini","Links","Third","Error")
$oIE = _IECreate($eingabemulti2)
ElseIf

If 
$linkanzahl = 4 Then 
$eingabemulti 
= Iniread("MultiView.ini","Links","First","Error")
$oIE = _IECreate($eingabemulti)
$eingabemulti2 = Iniread("MultiView.ini","Links","Second","Error")
$oIE = _IECreate($eingabemulti2)
$eingabemulti3 = Iniread("MultiView.ini","Links","Third","Error")
$oIE = _IECreate($eingabemulti2)
$eingabemulti4 = Iniread("MultiView.ini","Links","Third","Error")
$oIE = _IECreate($eingabemulti2)
ElseIf
EndSwitch
WEnd
EndSwitch
WEnd

Func stop
()
Exit
EndFunc 

Func _write_log
($iLog, $sText, $hWND)
GUICtrlSetData($iLog, GUICtrlRead($iLog)&@HOUR&":"&@MIN&":"&@SEC&" "&$sText&@CRLF)
ControlSend($hWND, "", $iLog, "{end}")
EndFunc

Func _Log
($sText)
FileWrite(@ScriptDir & "\Log.txt", @HOUR&":"&@MIN&":"&@SEC&" "&$sText& @CRLF)
EndFunc 
06/15/2013 18:22 omer36#2
Quote:
while 1
while 1
while 1
while 1
while 1
;;
;;
wend
wend
wend
wend
wend
wtf?

lern liebern ochmal die grundlagen.


und drück mal in scite strg+t, dann siehst du vllt. wo etwas fehlen könnte
06/15/2013 18:26 Fl00d3R#3
Ändere das "ElseIf" in Zeile 114, 124 & 136 mit "EndIf"

PS, damit geht es. Lass Tidy drüber laufen dann passt die Struktur wieder.
06/15/2013 21:35 EinfachSö#4
Und als kleiner Tipp. Wenn du hier etwas postest, dann sollten Einschübe vorhanden sein.
So etwa:

PHP Code:
If bla then
    
while 1
        Sleep
(100)
    
Wend
elseif bla then
    
Do
        
bla
        
If bla then
            bla
        
Endif
    
Until x=y
endif 
dann stehen die anfänge und enden der schleifen untereinander und es ist besser zu lesen
06/16/2013 10:40 Cpt.Cock#5
Quote:
Originally Posted by omer36 View Post
wtf?

lern liebern ochmal die grundlagen.


und drück mal in scite strg+t, dann siehst du vllt. wo etwas fehlen könnte
OMG, du hast den code wohl net kapiert :O
06/16/2013 11:04 lolkop#6
Quote:
Originally Posted by Cpt.Cock View Post
OMG, du hast den code wohl net kapiert :O
fakt ist, das der code alles andere als gut geschrieben ist.

deine fehler liegen wie bereits erwähnt darinn, das du direkt nach ElseIf ein weiteres If platziert hast...

abgesehen davon, solltest du nie mit mehr als einer endlosschleife arbeiten, da jede unterschleife den rest des scriptes blockiert. Der schlüssel zum erfolg liegt hier in zustandsvariablen.

baue deine main schleife möglichst so auf:
Code:
Dim $button1State, $button2State, <other state variables>
<gui creation>
While True
    Switch GuiGetMsg()
        Case $button1
            $button1State=Not $button1State
        Case $button2
            $button2State=Not $button2State
        <other switch sases>
    EndSwitch
    If $button1State Then
        <action 1>
    EndIf
    If $button2State Then
        <action2>
    EndIf
    <other actions>
WEnd
so kannst du beliebig viele aktionen endlos oft nebeneinander her laufen lassen, ohne einen teil der main schleife unerreichbar zu machen...