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 Version3.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"362424201122)
$eingabe GUICtrlCreateInput(""484020921)
$Start GUICtrlCreateButton("Start"272247525)
$Link GUICtrlCreateLabel("Link"8402417)
$Edit1 GUICtrlCreateEdit(""880345305)
GUICtrlSetData(-1"")
$StartGeheim GUICtrlCreateButton("StartGeheim"272487525)
$Progress1 GUICtrlCreateProgress(040035817)
$optionen GUICtrlCreateButton("Optionen"8033925)
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)
_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"615438192124)
$Label1 GUICtrlCreateLabel("Um den MultiView-Modus zu aktivieren, gib an weiviele Links es sind un klicke auf Starten"8842817)
$Button1 GUICtrlCreateButton("Start-MultiView"4723212333)
$Label2 GUICtrlCreateLabel("Um die abzuarbeitenden Links zu editieren, sieh dir die MultiView.ini an."84033917)
$Input1 GUICtrlCreateInput("Anzahl Links"472812121)
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($iLogGUICtrlRead($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...