1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. bernd670

Beiträge von bernd670

  • script soll angehalten werden, wenn user abgemeldet oder screensaver an ist

    • bernd670
    • 11. Juni 2007 um 13:52
    Zitat

    Original von sc4ry
    hiho,

    ist es möglich, ein script, dass sich in einer schleife befindet, zu "stoppen/paussieren", wenn der screensaver an ist, oder zZ kein aktiver user an einem/dem konto angemeldet ist?

    Ich habe auch von dem Fall gesprochen das kein Benutzer angemeldet ist! Wenn der Rechner nur gesperrt ist oder der Bildschirmschoner läuft existieren die Variablen natürlich!

  • script soll angehalten werden, wenn user abgemeldet oder screensaver an ist

    • bernd670
    • 11. Juni 2007 um 01:06

    Wenn kein User angemeldet ist existieren auch nicht die Variablen %USERNAME% und %HOMEPATH%. Vllt. kann man es ja darüber steuern!

  • input plus gui oberfläche

    • bernd670
    • 11. Juni 2007 um 00:03

    Die Tasten die simuliert werden sollen werden einfach hintereinander geschrieben. Ich habe jetzt noch eingefügt das der eingegebene Text in einer Ini-Datei abgelegt wird und beim nächsten Start automatisch zur Verfügung steht.

    [autoit]

    Const $szIniName = StringLeft(@ScriptFullPath,StringInStr(@ScriptFullPath,".",0,-1)) & "ini"

    [/autoit][autoit][/autoit][autoit]

    Local $szDefault = ""

    [/autoit][autoit][/autoit][autoit]

    If FileExists($szIniName) Then
    $szDefault = IniRead($szIniName,"config","default","")
    EndIf

    $szInput = InputBox("Eingabe", "Das soll gesendet werden", $szDefault)
    if Not @error Then
    send("{lwin}{up}{up}{up}{enter}" & $szInput & "{enter}")
    IniWrite($szIniName,"config","default",$szInput)
    EndIf

    [/autoit]
  • input plus gui oberfläche

    • bernd670
    • 10. Juni 2007 um 22:22

    Dafür benötigt man keine GUI, da reicht auch einfach eine Inputbox!

    [autoit]

    $szInput = InputBox("Eingabe", "Das soll gesendet werden")
    if Not @error Then
    send("{lwin}+{up}+{up}+{up}+{enter}" & $szInput & "+{enter}")
    EndIf

    [/autoit]

    Sind die Plus-Zeichen (=Shift-Taste) im Send gewollt?

  • TCP Send - Hexadezimal Werte

    • bernd670
    • 10. Juni 2007 um 22:04

    So wie Du es geschrieben hast wird ein String mit der Zeichenfolge gesendet (= 20 Zeichen), einfach mal ein 0x an den Anfang schreiben dann sollte es eigentlich als Hex-Code gesendet werden (= 10 Zeichen).

    $sendmich = "0x00808A0689F897E72665"

    btw wenn man Packet Sniffer einsetzt ohne das das "Opfer" darüber informiert ist und dem zugestimmt hat, ist dieser Einsatz strafbar! Darum bin bei solchen sachen immer etwas vorsichtig. ;)


    Edit: Wenn es nicht funktioniert könnte man als alternative die Tabelle auf http://www.rev6.com/index.php?site=servers mit ie.au3 auslesen und auswerten.

  • TCP Send - Hexadezimal Werte

    • bernd670
    • 10. Juni 2007 um 17:42

    Tut mir leid aber ich reagiere immer etwas allergisch wenn jemand mit Packet Sniffern etwas ausspioniert und dann auch um Hilfe bitte mit diesen gewonnen Daten etwas zu manipulieren, zumal die Daten die Du zurückbekommen hast die Namen von fünf Silkroad-Servern enthält!

  • shoutbox über ie.au3 bedinen

    • bernd670
    • 10. Juni 2007 um 17:07

    Zum zählen kann man sich ein kleines Script schreiben:

    [autoit]

    #include <ie.au3>

    [/autoit][autoit][/autoit][autoit]

    $oIE = _IECreate("http://178941.shoutbox.de/")

    [/autoit][autoit][/autoit][autoit]

    $oForm = _IEFormGetCollection ($oIE,0)

    [/autoit][autoit][/autoit][autoit]

    $oQuerys = _IEFormElementGetCollection ($oForm)
    $iNumQuerys = @extended
    MsgBox(0, "Info", "Es sind " & $iNumQuerys & " Elemente in dieser Form!")
    For $i = 0 to ($iNumQuerys - 1)
    $oQuery = _IEFormElementGetCollection ($oForm, $i)
    MsgBox(0, "Element Nr. " & $i, " Name = " & $oQuery.name)
    Next

    [/autoit]

    oder man zählt händisch, bei 0 beginnend, die Element in der Form!

  • shoutbox über ie.au3 bedinen

    • bernd670
    • 10. Juni 2007 um 15:28

    Das liegt natürlich im Bereich des möglichen, so ist es unabhängig vom Namen der Elemente!

    [autoit]

    #include <ie.au3>

    [/autoit][autoit][/autoit][autoit]

    Const $c_szName = "Bernd"
    Const $c_szMsg = "Testnachricht"

    [/autoit][autoit][/autoit][autoit]

    $oIE = _IECreate("http://178941.shoutbox.de/")
    $oForm = _IEFormGetCollection ($oIE,0)
    $oName = _IEFormElementGetCollection($oForm,4)
    $oMsg = _IEFormElementGetCollection($oForm,5)
    $oSubmit = _IEFormElementGetObjByName($oForm,"ok")

    [/autoit][autoit][/autoit][autoit]

    _IEFormElementSetValue($oName,$c_szName)
    _IEFormElementSetValue($oMsg,$c_szMsg)
    _IEAction($oSubmit,"click")

    [/autoit]
  • doppelte sciptausführung

    • bernd670
    • 10. Juni 2007 um 15:15

    Als erstes muss der Parameter $flag auf 1 gesetzt werden, da sonst immer das neue Script beendet wird, zweites wenn man ProcessClose einfach so aufruft kann man nicht voraussagen welches von den zwei Programmen beendet wird, da das zweite Programm ja auch eine niedriegere PID besitzen kann als das Erste.

    Probiers mal so:

    [autoit]

    If _Singleton(@ScriptName, 1) = 0 Then
    Do
    $PID = ProcessExists(@ScriptName)
    If $PID = @AutoItPID Then ContinueLoop
    ProcessClose($PID)
    Until ($PID <> 0)
    EndIf

    [/autoit]
  • shoutbox über ie.au3 bedinen

    • bernd670
    • 10. Juni 2007 um 11:40

    Unter XP mit IE7 funktioniert es so wie ich es gepostet habe!

    Evtl. mal die Fehlermeldung posten!

  • shoutbox über ie.au3 bedinen

    • bernd670
    • 10. Juni 2007 um 09:38

    Es würde funktionieren wenn es der richtige Befehl wäre!

    [autoit]

    #include <ie.au3>

    [/autoit][autoit][/autoit][autoit]

    Const $c_szName = "Bernd"
    Const $c_szMsg = "Testnachricht"

    [/autoit][autoit][/autoit][autoit]

    $oIE = _IECreate("http://178941.shoutbox.de/")

    [/autoit][autoit][/autoit][autoit]

    $oForm = _IEFormGetCollection ($oIE,0)
    $oName = _IEFormElementGetObjByName($oForm,"TVRjNE9UUXhMbk5vYjNWMFltOTRMbVJs2ouidfgkajdf")
    $oMsg = _IEFormElementGetObjByName($oForm,"YUhSMGN984B546092342554103428")
    $oSubmit = _IEFormElementGetObjByName($oForm,"ok")

    [/autoit][autoit][/autoit][autoit]

    _IEFormElementSetValue($oName,$c_szName)
    _IEFormElementSetValue($oMsg,$c_szMsg)
    _IEAction($oSubmit,"click")

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Sudoku

    • bernd670
    • 9. Juni 2007 um 22:23

    Jetzt sollte alles funktionieren!

    Edit:

    Ich habe es mal an die neue AutoIt-Version (3.2.10.0) angepasst!
    Die zus. benötigten Datei sind in der ZIP!

    sudoku.au3
    [autoit]

    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.2.10.0
    ; Author: bernd670
    ; Idea: Alina
    ;
    ; Script Function:
    ; Sudoku & Leveleditor
    ;
    ; ----------------------------------------------------------------------------
    #Region Compiler directives section
    ;~ #AutoIt3Wrapper_Prompt=y
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Icon =.\Images\Sudoku.ico
    #AutoIt3Wrapper_Res_LegalCopyright=bernd670 and Friends
    #AutoIt3Wrapper_Res_Description=AutoIt v3 Skript - Sudoku
    #AutoIt3Wrapper_Res_Comment=Sudoku Spiel
    #AutoIt3Wrapper_OutFile_Type=exe
    #AutoIt3Wrapper_Compression=4 ;Compression parameter 0-4 0=Low 2=normal 4=High
    #AutoIt3Wrapper_Allow_Decompile=n
    #AutoIt3Wrapper_Res_Field=Entwickler|bernd670
    #AutoIt3Wrapper_Res_Field=Release Datum|%date% %time%
    #AutoIt3Wrapper_Res_Field=Programmgruppe|Spiele
    #AutoIt3Wrapper_Res_Field=Original Dateiname|Sudoku.exe
    #AutoIt3Wrapper_Res_Field=Version|1.0
    #AutoIt3Wrapper_Run_Obfuscator=n
    #endregion ; ==> Compiler directives section

    [/autoit] [autoit][/autoit] [autoit]

    #region FileInstall
    FileInstall(".\Sudoku.dll", @ScriptDir & "\Sudoku.dll", 0)
    #endregion ; ==> FileInstall

    [/autoit] [autoit][/autoit] [autoit]

    #region Includes
    #include <GUIConstants.au3>
    #Include <GuiStatusBar.au3>
    #endregion ; ==> Includes

    [/autoit] [autoit][/autoit] [autoit]

    #region AutoItSetOptions
    Opt("GUIOnEventMode", 1)
    #endregion ; ==> AutoItSetOptions

    [/autoit] [autoit][/autoit] [autoit]

    #region Konstantendefinitionen
    Const $ciTop = 40
    Const $ciLeft = 20
    Const $cstrIniFile = @ScriptDir & "\Sudoku.ini"
    #endregion ; ==> Konstantendefinitionen

    [/autoit] [autoit][/autoit] [autoit]

    #region Variablendefinitionen

    [/autoit] [autoit][/autoit] [autoit]

    #region Variablen für alle Modi
    Dim $arField[9][9] ; Speichert die ControlID's der Inputfelder
    Dim $arLevels ; Array für die Spielstufen
    Dim $arGames ; Array für die Spiele in den Spielstufen
    Global $bGameMode = True ; True = Spielmodus, False = Editormodus
    Local $arPartsWidth[2] = [ 55, -1 ]
    Local $arPartsText[2] = [ "Let's go!", "" ]
    #endregion ; ==> Variablen für alle Modi

    [/autoit] [autoit][/autoit] [autoit]

    #region Variablen für den Spielmodus ($bGameMode = True)
    Dim $arResult[3][9] ; Zur Berechnung der Ergebnisse [0][x] = Zeile, [1][x] = Spalte, [2][x] = Block
    Global $bUnraveled = False ; Rätsel gelöst
    Global $bStarted = False ; Rätsel begonnen
    Global $iStartTime ; Startzeit
    Global $iRunTime ; Spieldauer
    #endregion ; ==> Variablen für den Spielmodus ($bGameMode = True)

    [/autoit] [autoit][/autoit] [autoit]

    #region Variablen für den Editormodus ($bGameMode = False)
    Global $bLevelsChanged ; Ist True wenn sich an den Levels was geändert hat
    Global $bSheetSaveOK ; Ist True wenn das Blatt mit mehr als 21 Ziffern gefüllt ist
    Global $bSheetChanged ; Ist True wenn das Blatt verändert wurde
    Global $iGameIndex ; Speichert die aktuelle Spielnummer
    Global $strTempGame ; Zwischenspeicher für das aktuelle Spiel
    Global $strPreLevel ; Text der den Key in der INI-Section Levels vorangestellt ist
    #endregion ; ==> Variablen für den Editormodus ($bGameMode = False)

    [/autoit] [autoit][/autoit] [autoit]

    #endregion ; Variablendefinitionen

    [/autoit] [autoit][/autoit] [autoit]

    #region GUI-Erstellung
    $FrmMain = GUICreate("Sudoku", 633, 454, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "FormMainClose")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "FormMainMinimize")
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, "FormMainMaximize")
    GUISetOnEvent($GUI_EVENT_RESTORE, "FormMainRestore")
    $ModeMenu = GUICtrlCreateMenu("&Modus")
    $ModeMenuItemGame = GUICtrlCreateMenuItem("&Spiel", $ModeMenu);,0,1)
    GUICtrlSetOnEvent(-1, "ModeChange")
    GUICtrlSetState(-1, $GUI_CHECKED)
    $ModeMenuItemEdit = GUICtrlCreateMenuItem("&Editor", $ModeMenu);,1,1)
    GUICtrlSetOnEvent(-1, "ModeChange")
    $PicLeft = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft, $ciTop + 5, 5, 334, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicInnerLeft = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft + 113, $ciTop + 5, 5, 334, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicInnerRight = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft + 226, $ciTop + 5, 5, 334, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicRight = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft + 339, $ciTop + 5, 5, 334, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicTop = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft, $ciTop, 344, 5, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicInnerTop = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft + 5, $ciTop + 113, 334, 5, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicInnerBottom = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft + 5, $ciTop + 226, 334, 5, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicBottom = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft, $ciTop + 339, 344, 5, BitOR($SS_NOTIFY, $WS_GROUP))
    For $iRow = 0 To 8
    $iTop = $ciTop + 8 + $iRow * 35 + Int($iRow / 3) * 8
    For $iColumn = 0 To 8
    $iLeft = $ciLeft + 8 + $iColumn * 35 + Int($iColumn / 3) * 8
    $arField[$iRow][$iColumn] = GUICtrlCreateInput("", $iLeft, $iTop, 32, 32, BitOR($ES_CENTER, $ES_NUMBER))
    GUICtrlSetOnEvent(-1, "FieldChange")
    GUICtrlSetLimit(-1, 1)
    GUICtrlSetFont(-1, 16, 400, 0, "Arial")
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    #region Controls für alle Modi (immer sichtbar)
    $LblLevels = GUICtrlCreateLabel("Level:", $ciLeft + 360, $ciTop + 5, 50, $WS_GROUP)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    $CBLevels = GUICtrlCreateCombo("", $ciLeft + 420, $ciTop + 5, 120, 100, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL, $WS_VSCROLL))
    GUICtrlSetOnEvent(-1, "LevelChange")
    $LblGames = GUICtrlCreateLabel("Spiel:", $ciLeft + 360, $ciTop + 30, 50)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    $CBGames = GUICtrlCreateCombo("", $ciLeft + 420, $ciTop + 30, 120, 100, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL, $WS_VSCROLL))
    GUICtrlSetOnEvent(-1, "GameChange")
    #endregion ; ==> Controls für alle Modi (immer sichtbar)

    [/autoit] [autoit][/autoit] [autoit]

    #region Controls für den Spielmodus (sichtbar wenn $bGameMode = True)
    $ButSolve = GUICtrlCreateButton("Spiel &lösen", $ciLeft + 360, $ciTop + 280, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButSolveClick")
    $ButRestart = GUICtrlCreateButton("Spiel &neustarten", $ciLeft + 360, $ciTop + 310, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButRestartClick")
    #endregion ; ==> Controls für den Spielmodus (sichtbar wenn $bGameMode = True)

    [/autoit] [autoit][/autoit] [autoit]

    #region Controls für den Editormodus (sichtbar wenn $bGameMode = False)
    $ButChangeLevel = GUICtrlCreateButton("Levelbez. ä&ndern", $ciLeft + 360, $ciTop + 110, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButChangeLevelClick")
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButNewLevel = GUICtrlCreateButton("Neuer &Level", $ciLeft + 360, $ciTop + 140, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButNewLevelClick")
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButNewSheet = GUICtrlCreateButton("Neues &Blatt", $ciLeft + 360, $ciTop + 180, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButNewSheetClick")
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButGenerateGame = GUICtrlCreateButton("Spiel &generieren", $ciLeft + 360, $ciTop + 210, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButGenerateGameClick")
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButDelSheet = GUICtrlCreateButton("Blatt lösch&en", $ciLeft + 360, $ciTop + 240, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButDelSheetClick")
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButSave = GUICtrlCreateButton("Blatt &speichern", $ciLeft + 360, $ciTop + 280, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButSaveClick")
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButUndo = GUICtrlCreateButton("Änderungen &verwerfen", $ciLeft + 360, $ciTop + 310, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButUndoClick")
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetState(-1, $GUI_HIDE)
    #endregion ; ==> Controls für den Editormodus (sichtbar wenn $bGameMode = False)

    [/autoit] [autoit][/autoit] [autoit]

    $StatusBar = _GUICtrlStatusBar_Create($FrmMain, $arPartsWidth, $arPartsText)
    #endregion ; ==> GUI-Erstellung

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    #region Initialisierung
    $arLevels = IniReadSection($cstrIniFile, "Levels")
    If @error Then ; Fehler beim lesen der INI-Datei
    $strPreLevel = "Level"
    Dim $arLevels[2][2]
    Dim $arGames[2][2]
    $arLevels[0][0] = 1
    $arLevels[1][0] = $strPreLevel & "1"
    $arLevels[1][1] = "Level 1"
    GUICtrlSetData($CBLevels, "Level 1", "Level 1")
    $arGames[0][0] = 1
    $arGames[1][0] = "001"
    $arGames[1][1] = StringFormat("%081s", "0")
    GUICtrlSetData($CBGames, "001", "001")
    IniWriteSection($cstrIniFile, "Levels", $arLevels)
    IniWriteSection($cstrIniFile, $arLevels[1][0], $arGames)

    $bGameMode = SetStates(False) ; in Editormodus schalten
    GameChange()
    $bLevelsChanged = True
    $bSheetChanged = False
    $bSheetSaveOK = False
    Else
    $strPreLevel = StringRegExp($arLevels[1][0], "(.*)\d+", 1)
    $strPreLevel = $strPreLevel[0]
    If $arLevels[0][0] > 1 Then
    $strLevels = ""
    For $iIndex = 1 To $arLevels[0][0]
    $strLevels &= $arLevels[$iIndex][1] & "|"
    Next
    $strLevels = StringTrimRight($strLevels, 1)
    GUICtrlSetData($CBLevels, $strLevels, StringLeft($strLevels, StringInStr($strLevels, "|") - 1))
    Else
    GUICtrlSetData($CBLevels, $arLevels[1][1], $arLevels[1][1])
    EndIf
    LevelChange()
    EndIf
    #endregion ; ==> Initialisierung

    [/autoit] [autoit][/autoit] [autoit]

    #region Hauptschleife
    While 1
    If $bGameMode = True Then ; im Spielmodus

    If $bUnraveled = True Then
    If MsgBox(262148, "", "Sudoku wurde gelöst!" & @CRLF & "Glückwunsch!" & @CRLF & @CRLF & "Weiterspielen ?") = 7 Then ExitLoop
    $bUnraveled = False
    EndIf

    If $bStarted = True Then
    If BitAND(GUICtrlRead($ModeMenu), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ModeMenu, $GUI_DISABLE) ; Während des Spieles Modus-Menü deaktivieren
    If $iStartTime = 0 Then $iStartTime = TimerInit()
    If $iRunTime <> Int(TimerDiff($iStartTime) / 1000) Then
    $iRunTime = Int(TimerDiff($iStartTime) / 1000)
    _GUICtrlStatusBar_SetText($StatusBar, StringFormat("%02i:%02i:%02i", Int($iRunTime / 3600), Int(Mod($iRunTime, 3600) / 60), Mod($iRunTime, 60)), 0)
    EndIf

    If BitAND(GUICtrlGetState($ButRestart), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ButRestart, $GUI_ENABLE)
    Else
    If BitAND(GUICtrlRead($ModeMenu), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ModeMenu, $GUI_ENABLE)
    _GUICtrlStatusBar_SetText($StatusBar, "Let's go!", 0)
    If BitAND(GUICtrlGetState($ButRestart), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ButRestart, $GUI_DISABLE)
    EndIf

    Else ; im Editormodus
    If Not $bSheetChanged Then
    If BitAND(GUICtrlGetState($ButNewLevel), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ButNewLevel, $GUI_ENABLE)
    If BitAND(GUICtrlGetState($ButUndo), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ButUndo, $GUI_DISABLE)
    Else
    If BitAND(GUICtrlGetState($ButNewLevel), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ButNewLevel, $GUI_DISABLE)
    If BitAND(GUICtrlGetState($ButUndo), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ButUndo, $GUI_ENABLE)
    EndIf

    If StringChrCount($strTempGame, "0") = 81 Then
    If BitAND(GUICtrlGetState($ButNewSheet), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ButNewSheet, $GUI_DISABLE)
    If BitAND(GUICtrlGetState($CBLevels), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($CBLevels, $GUI_DISABLE)
    If BitAND(GUICtrlGetState($CBGames), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($CBGames, $GUI_DISABLE)
    Else
    If BitAND(GUICtrlGetState($CBLevels), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($CBLevels, $GUI_ENABLE)
    If BitAND(GUICtrlGetState($CBGames), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($CBGames, $GUI_ENABLE)
    If BitAND(GUICtrlGetState($ButNewSheet), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ButNewSheet, $GUI_ENABLE)
    EndIf

    If $bSheetChanged And $bSheetSaveOK Then
    If BitAND(GUICtrlGetState($ButSave), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ButSave, $GUI_ENABLE)
    Else
    If BitAND(GUICtrlGetState($ButSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ButSave, $GUI_DISABLE)
    EndIf

    EndIf

    $CGF = ControlGetFocus($FrmMain)
    If StringLeft($CGF, 4) = "Edit" Then
    If _IsPressed("25") Then ; Cursor Links
    If Int(StringMid($CGF, 5)) = 1 Then
    GUICtrlSetState($arField[8][8], $GUI_FOCUS)
    Else
    ControlSend($FrmMain, "", "", "+{TAB}")
    EndIf
    EndIf
    If _IsPressed("26") Then ; Cursor hoch
    Switch Int(StringMid($CGF, 5))
    Case 1
    GUICtrlSetState($arField[8][8], $GUI_FOCUS)
    Case 2 To 9
    GUICtrlSetState($arField[8][Int(StringMid($CGF, 5)) - 2], $GUI_FOCUS)
    Case Else
    GUICtrlSetState($arField[Int((StringMid($CGF, 5) - 10) / 9) ][Int(Mod(StringMid($CGF, 5) - 10, 9)) ], $GUI_FOCUS)
    EndSwitch
    EndIf
    If _IsPressed("27") Then ; Cursor rechts
    If Int(StringMid($CGF, 5)) = 81 Then
    GUICtrlSetState($arField[0][0], $GUI_FOCUS)
    Else
    ControlSend($FrmMain, "", "", "{TAB}")
    EndIf
    EndIf
    If _IsPressed("28") Then ; Cursor runter
    If Int(StringMid($CGF, 5)) >= 73 Then
    GUICtrlSetState($arField[0][Int(Mod(StringMid($CGF, 5) + 9, 9)) ], $GUI_FOCUS)
    Else
    GUICtrlSetState($arField[Int((StringMid($CGF, 5) + 8) / 9) ][Int(Mod(StringMid($CGF, 5) + 8, 9)) ], $GUI_FOCUS)
    EndIf
    EndIf
    EndIf
    Sleep(80)
    WEnd
    #endregion ; ==> Hauptschleife

    [/autoit] [autoit][/autoit] [autoit]

    #region Funktionen
    Func FormMainClose()
    If $bGameMode = False Then ; im Editormodus
    If $bSheetChanged Then
    $iAnswer = MsgBox(262436, "Beenden", "Wenn Sie jetzt beenden gehen" & @CRLF & "alle Änderungen verloren!" & @CRLF & @CRLF & "Soll wirklich beendet werden?")
    If $iAnswer = 7 Then Return
    EndIf
    EndIf
    Exit
    EndFunc ;==>FormMainClose

    [/autoit] [autoit][/autoit] [autoit]

    Func FormMainMaximize()
    EndFunc ;==>FormMainMaximize
    Func FormMainMinimize()
    EndFunc ;==>FormMainMinimize
    Func FormMainRestore()
    EndFunc ;==>FormMainRestore

    [/autoit] [autoit][/autoit] [autoit]

    #region Funktionen für alle Modi
    ; ModeChange -> wechsel zwischen Spiel und Editor
    Func ModeChange()
    Switch @GUI_CtrlId
    Case $ModeMenuItemGame ; In Spielmodus schalten
    If $bGameMode = False Then
    If $bLevelsChanged Or $bSheetChanged Then
    $iAnswer = MsgBox(262436, "Moduswechsel", "Wenn Sie jetzt in den Spielmodus schalten" & @CRLF & "gehen alle Änderungen verloren!" & @CRLF & @CRLF & "Wollen Sie wirklich umschalten?")
    If $iAnswer = 7 Then Return
    EndIf
    SetStates(True) ; Initialisierung für Spielmodus
    LevelChange()
    EndIf
    Case $ModeMenuItemEdit ; In Editormodus schalten
    If $bGameMode = True Then
    SetStates(False) ; Initialisierung für Editmodus
    LevelChange()
    EndIf
    EndSwitch
    EndFunc ;==>ModeChange

    [/autoit] [autoit][/autoit] [autoit]

    ; Initialisierung je nach Modus
    Func SetStates($bMode)
    If $bMode Then ; Spielmodus
    ConsoleWrite("Set Gamemode" & @CRLF)
    WinSetTitle($FrmMain, "", "Sudoku")
    GUICtrlSetState($ModeMenuItemGame, $GUI_CHECKED)
    GUICtrlSetState($ModeMenuItemEdit, $GUI_UNCHECKED)
    GUICtrlSetState($ButSolve, $GUI_SHOW)
    GUICtrlSetState($ButRestart, $GUI_SHOW)
    GUICtrlSetState($ButChangeLevel, $GUI_HIDE)
    GUICtrlSetState($ButNewLevel, $GUI_HIDE)
    GUICtrlSetState($ButNewSheet, $GUI_HIDE)
    GUICtrlSetState($ButGenerateGame, $GUI_HIDE)
    GUICtrlSetState($ButDelSheet, $GUI_HIDE)
    GUICtrlSetState($ButSave, $GUI_HIDE)
    GUICtrlSetState($ButUndo, $GUI_HIDE)
    $bGameMode = True
    $bUnraveled = False
    $bStarted = False
    Else ; Editormodus
    ConsoleWrite("Set Editmode" & @CRLF)
    WinSetTitle($FrmMain, "", "Sudoku - Level Editor")
    GUICtrlSetState($ModeMenuItemGame, $GUI_UNCHECKED)
    GUICtrlSetState($ModeMenuItemEdit, $GUI_CHECKED)
    GUICtrlSetState($ButSolve, $GUI_HIDE)
    GUICtrlSetState($ButRestart, $GUI_HIDE)
    GUICtrlSetState($ButChangeLevel, $GUI_SHOW)
    GUICtrlSetState($ButNewLevel, $GUI_SHOW)
    GUICtrlSetState($ButNewSheet, $GUI_SHOW)
    GUICtrlSetState($ButGenerateGame, $GUI_SHOW)
    GUICtrlSetState($ButDelSheet, $GUI_SHOW)
    GUICtrlSetState($ButSave, $GUI_SHOW)
    GUICtrlSetState($ButUndo, $GUI_SHOW)
    $bGameMode = False
    $bLevelsChanged = False
    $bSheetChanged = False
    $bSheetSaveOK = False
    EndIf
    GUICtrlSetState($CBLevels, $GUI_ENABLE)
    GUICtrlSetState($CBGames, $GUI_ENABLE)

    Return $bMode
    EndFunc ;==>SetStates

    [/autoit] [autoit][/autoit] [autoit]

    ; FieldChange -> eines der Inputfelder wurde geändert
    Func FieldChange()
    If $bGameMode = True Then ; im Spielmodus
    For $iRow = 0 To 8
    $arResult[0][$iRow] = 0
    For $iColumn = 0 To 8
    If $iRow = 0 Then
    $arResult[1][$iColumn] = 0
    $arResult[2][$iColumn] = 0
    EndIf
    $iValue = Int(GUICtrlRead($arField[$iRow][$iColumn]))
    $arResult[0][$iRow] += $iValue ; Zeilenergebnis
    $arResult[1][$iColumn] += $iValue ; Spaltenergebnis
    $arResult[2][Int($iRow / 3) * 3 + Int($iColumn / 3) ] += $iValue ; Blockergebnis
    Next
    Next
    $bUnraveled = True
    For $iIndex = 0 To 8
    If $arResult[0][$iIndex] <> 45 Or $arResult[1][$iIndex] <> 45 Or $arResult[2][$iIndex] <> 45 Then
    $bUnraveled = False
    ExitLoop
    EndIf
    Next
    $bStarted = True
    Else ; im Editormodus
    $iCounter = 0
    $arGames[$iGameIndex][1] = ""
    For $iRow = 0 To 8
    For $iColumn = 0 To 8
    $iValue = Int(GUICtrlRead($arField[$iRow][$iColumn]))
    If $iValue > 0 Then
    $iCounter += 1
    $arGames[$iGameIndex][1] &= String($iValue)
    Else
    $arGames[$iGameIndex][1] &= "0"
    EndIf
    Next
    Next
    $bSheetSaveOK = False
    If $iCounter > 13 Then $bSheetSaveOK = True
    $bSheetChanged = True
    _GUICtrlStatusBar_SetText($StatusBar, $iCounter & " Ziffern")
    EndIf
    EndFunc ;==>FieldChange

    [/autoit] [autoit][/autoit] [autoit]

    ; LevelChange -> Schwierigkeitsstufe wurde geändert
    Func LevelChange()
    $strLevel = GUICtrlRead($CBLevels)
    For $iIndex = 1 To $arLevels[0][0]
    If $arLevels[$iIndex][1] == $strLevel Then ExitLoop
    Next
    $arGames = IniReadSection($cstrIniFile, $arLevels[$iIndex][0])
    If @error Then
    MsgBox(4096, "", "Fehler beim lesen der Ini-Datei!")
    Exit
    EndIf
    Switch $arGames[0][0]
    Case 0
    MsgBox(4096, "", "Für diesen Level existieren keine Spiele")
    Return
    Case 1
    GUICtrlSetData($CBGames, "|" & $arGames[1][0], $arGames[1][0])
    If StringChrCount($arGames[1][1], "0") = 81 Then SetStates(False)
    Case Else
    $strGames = ""
    For $iIndex = 1 To $arGames[0][0]
    $strGames &= $arGames[$iIndex][0] & "|"
    Next
    $strGames = StringTrimRight($strGames, 1)
    GUICtrlSetData($CBGames, "|" & $strGames, StringLeft($strGames, StringInStr($strGames, "|") - 1))
    EndSwitch
    GameChange()
    EndFunc ;==>LevelChange

    [/autoit] [autoit][/autoit] [autoit]

    ; GameChange -> Neues Spiel wurde gewählt
    Func GameChange()
    $strGame = GUICtrlRead($CBGames)
    For $iIndex = 1 To $arGames[0][0]
    If $arGames[$iIndex][0] == $strGame Then ExitLoop
    Next
    For $iRow = 8 To 0 Step - 1
    For $iColumn = 8 To 0 Step - 1
    $iValue = StringMid($arGames[$iIndex][1], $iRow * 9 + $iColumn + 1, 1)
    If $iValue <> 0 Then
    GUICtrlSetData($arField[$iRow][$iColumn], $iValue)
    If $bGameMode = True Then ; im Spielmodus
    GUICtrlSetStyle($arField[$iRow][$iColumn], BitOR($ES_CENTER, $ES_NUMBER, $ES_READONLY))
    Else ; im Editormodus
    GUICtrlSetStyle($arField[$iRow][$iColumn], BitOR($ES_CENTER, $ES_NUMBER))
    EndIf
    Else
    GUICtrlSetData($arField[$iRow][$iColumn], "")
    GUICtrlSetStyle($arField[$iRow][$iColumn], BitOR($ES_CENTER, $ES_NUMBER))
    EndIf
    Next
    Next

    If $bGameMode = True Then ; im Spielmodus
    $bStarted = False
    $iStartTime = 0
    Else ; im Editormodus
    $strTempGame = $arGames[$iIndex][1]
    $iGameIndex = $iIndex
    _GUICtrlStatusBar_SetText($StatusBar, 81 - StringChrCount($strTempGame, "0") & " Ziffern")
    EndIf
    EndFunc ;==>GameChange
    #endregion ; ==> Funktionen für alle Modi

    [/autoit] [autoit][/autoit] [autoit]

    #region Funktionen für den Spielmodus ($bGameMode = True)
    Func ButSolveClick()
    $szField = ""

    For $iRow = 0 To 8
    For $iColumn = 0 To 8
    $chValue = GUICtrlRead($arField[$iRow][$iColumn])
    If $chValue = "" Then
    $szField &= "0"
    Else
    $szField &= $chValue
    EndIf
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $arDLL = DllCall("Sudoku.dll", "str", "SudokuSolve", "str", $szField)
    If IsArray($arDLL) Then $szField = $arDLL[0]

    For $iRow = 0 To 8
    For $iColumn = 0 To 8
    $chValue = StringMid($szField, $iRow * 9 + $iColumn + 1, 1)
    If $chValue <> 0 Then GUICtrlSetData($arField[$iRow][$iColumn], $chValue)
    Next
    Next
    FieldChange()
    EndFunc ;==>ButSolveClick

    [/autoit] [autoit][/autoit] [autoit]

    Func ButRestartClick()
    GameChange()
    EndFunc ;==>ButRestartClick
    #endregion ; ==> Funktionen für den Spielmodus ($bGameMode = True)

    [/autoit] [autoit][/autoit] [autoit]

    #region Funktionen für den Editormodus ($bGameMode = False)
    ; Button "Levelbez. ändern" wurde betätigt
    Func ButChangeLevelClick()
    $StrOldName = GUICtrlRead($CBLevels)
    For $iIndex = 1 To $arLevels[0][0]
    If $arLevels[$iIndex][1] == $StrOldName Then ExitLoop
    Next
    $strNewName = InputBox("Levelbezeichnung ändern", "Bitte neue Levelbezeichnung eingeben!" & @CRLF & @CRLF & _
    "Die derzeitige Bezeichnung ist: " & $StrOldName)
    If $strNewName <> $StrOldName And StringLen($strNewName) Then
    $arLevels[$iIndex][1] = $strNewName
    $bLevelsChanged = True
    $strLevels = ""
    For $iIndex = 1 To $arLevels[0][0]
    $strLevels &= $arLevels[$iIndex][1] & "|"
    Next
    $strLevels = StringTrimRight($strLevels, 1)
    GUICtrlSetData($CBLevels, $strLevels, $strNewName)
    EndIf
    EndFunc ;==>ButChangeLevelClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Neuer Level" wurde betätigt
    Func ButNewLevelClick()
    $strNewName = InputBox("Level hinzufügen", "Bitte Bezeichnung für den neuen Level eingeben!")
    If StringLen($strNewName) Then
    ReDim $arLevels[$arLevels[0][0] + 2][2]
    $arLevels[0][0] += 1
    $strLevels = ""
    For $iIndex = 1 To $arLevels[0][0] - 1
    $strLevels &= $arLevels[$iIndex][1] & "|"
    If Int(StringMid($arLevels[$iIndex][0], 6)) >= Int($arLevels[$arLevels[0][0]][0]) Then
    $arLevels[$arLevels[0][0]][0] = Int(StringMid($arLevels[$iIndex][0], 6)) + 1
    EndIf
    Next
    $arLevels[$arLevels[0][0]][0] = $strPreLevel & $arLevels[$arLevels[0][0]][0]
    $arLevels[$arLevels[0][0]][1] = $strNewName
    $strLevels &= $strNewName
    GUICtrlSetData($CBLevels, $strLevels, $strNewName)
    ReDim $arGames[2][2]
    $arGames[0][0] = 1
    $arGames[1][0] = "001"
    $arGames[1][1] = StringFormat("%081s", "0")
    GUICtrlSetData($CBGames, "001", "001")
    GameChange()
    $bLevelsChanged = True
    $bSheetChanged = True
    $bSheetSaveOK = False
    EndIf
    EndFunc ;==>ButNewLevelClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Neues Blatt" wurde betätigt
    Func ButNewSheetClick()
    ReDim $arGames[$arGames[0][0] + 2][2]
    $arGames[0][0] += 1
    $arGames[$arGames[0][0]][1] = StringFormat("%081s", "0")
    Switch $arGames[0][0]
    Case 0
    MsgBox(4096, "", "Für diesen Level existieren keine Spiele!")
    Return
    Case 1
    GUICtrlSetData($CBGames, "|" & $arGames[1][0], $arGames[1][0])
    Case Else
    $strGames = ""
    For $iIndex = 1 To $arGames[0][0] - 1
    $strGames &= $arGames[$iIndex][0] & "|"
    If Int($arGames[$iIndex][0]) >= Int($arGames[$arGames[0][0]][0]) Then
    $arGames[$arGames[0][0]][0] = StringFormat("%03i", Int($arGames[$iIndex][0]) + 1)
    EndIf
    Next
    $strGames &= $arGames[$arGames[0][0]][0]
    GUICtrlSetData($CBGames, "|" & $strGames, $arGames[$arGames[0][0]][0])
    EndSwitch
    GameChange()
    $bSheetSaveOK = False
    EndFunc ;==>ButNewSheetClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Blatt löschen" wurde betätigt
    Func ButDelSheetClick()
    If MsgBox(262436, "Blatt löschen", "Soll das Blatt wirklich gelöscht werden?") = 6 Then
    $iCounter = 1
    $strGames = ""
    For $iIndex = 1 To $arGames[0][0]
    If $iIndex = $iGameIndex Then ContinueLoop
    $arGames[$iCounter][0] = StringFormat("%03i", $iCounter)
    $arGames[$iCounter][1] = $arGames[$iIndex][1]
    $strGames &= $arGames[$iCounter][0] & "|"
    $iCounter += 1
    Next
    $strGames = StringTrimRight($strGames, 1)
    GUICtrlSetData($CBGames, "|" & $strGames, StringLeft($strGames, StringInStr($strGames, "|") - 1))
    $arGames[0][0] -= 1
    ReDim $arGames[$arGames[0][0] + 1][2]
    ButSaveClick()
    EndIf
    EndFunc ;==>ButDelSheetClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Spiel generieren" wurde betätigt
    Func ButGenerateGameClick()
    If StringChrCount($strTempGame, "0") < 81 Then
    If MsgBox(262436, "Spiel generieren", "Soll das aktuelle Blatt überschrieben werden?") = 7 Then Return
    EndIf


    EndFunc ;==>ButGenerateGameClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Generiert ein Spiel nach einem Algorithmus von Moritz Lenz -> http://moritz.faui2k3.org/de/yasss
    Func GenerateGame($nDifficulty, $nDeviation = 0)
    $arDLL = DllCall("Sudoku.dll", "str", "SudokuGenerate", "int", $nDifficulty, "int", $nDeviation)
    If IsArray($arDLL) Then Return SetError(0, 0, $arDLL[0])
    Return SetError(1, 0, "")
    EndFunc ;==>GenerateGame

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Blatt speichern" wurde betätigt
    Func ButSaveClick()
    If $bLevelsChanged Then
    IniWriteSection($cstrIniFile, "Levels", $arLevels)
    If @error Then
    MsgBox(4096, "", "Fehler beim lesen der Ini-Datei!")
    Exit
    EndIf
    $bLevelsChanged = False
    EndIf
    $strLevel = GUICtrlRead($CBLevels)
    For $iIndex = 1 To $arLevels[0][0]
    If $arLevels[$iIndex][1] == $strLevel Then ExitLoop
    Next
    IniWriteSection($cstrIniFile, $arLevels[$iIndex][0], $arGames)
    If @error Then
    MsgBox(4096, "", "Fehler beim lesen der Ini-Datei!")
    Exit
    EndIf
    GameChange()
    $bSheetChanged = False
    $bSheetSaveOK = False
    EndFunc ;==>ButSaveClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Änderungen verwerfen" wurde betätigt
    Func ButUndoClick()
    $arGames[$iGameIndex][1] = $strTempGame
    GameChange()
    $bSheetChanged = False
    $bSheetSaveOK = False
    EndFunc ;==>ButUndoClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Anzahl eines Zeichens im String zählen
    Func StringChrCount($String, $char)
    StringReplace($String, $char, $char)
    Return @extended
    EndFunc ;==>StringChrCount
    #endregion ; ==> Funktionen für den Editormodus ($bGameMode = False)

    [/autoit] [autoit][/autoit] [autoit]

    #endregion ; ==> Funktionen

    [/autoit]

    Dateien

    Sudoku.zip 647,81 kB – 263 Downloads
  • hilfe zu regex...

    • bernd670
    • 9. Juni 2007 um 19:24

    Wenn ich den Code als test.html speichere und folgendes Programm ausführe wird es korrekt angezeigt.

    [autoit]

    $html = FileRead("test.html")

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"",$html)
    $messageIE = StringRegExp($html,"(?i).*\: (.*)[\s.]*<script>.*",1)

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"",$messageIE[0])

    [/autoit]

    Edit: Zeile angepasst, dass problem ist das nach testtext noch ein Zeilenumbruch kommt!

  • Sudoku

    • bernd670
    • 9. Juni 2007 um 19:12

    Hallo,

    ich habe jetzt in C++ eine DLL geschrieben mit der man Spiele generieren und automatisch lösen kann. Der Algorithmus ist eine Idee von Moritz Lenz.

    Alle benötigten Dateien sind in der ZIP im Anhang! (s. Beitrag 49)

    Spoiler anzeigen
    [autoit]

    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.2.4.0
    ; Author: bernd670
    ; Idea: Alina
    ;
    ; Script Function:
    ; Sudoku & Leveleditor
    ;
    ; ----------------------------------------------------------------------------
    #Region Compiler directives section
    #Compiler_Prompt=y
    #Compiler_Res_Language=1031
    #Compiler_Icon =.\Images\Sudoku.ico
    #Compiler_Res_LegalCopyright=bernd670 and Friends
    #Compiler_Res_Description=AutoIt v3 Skript - Sudoku
    #Compiler_Res_Comment=Sudoku Spiel
    #Compiler_OutFile_Type=exe
    #Compiler_Compression=4 ;Compression parameter 0-4 0=Low 2=normal 4=High
    #Compiler_Allow_Decompile=n
    #Compiler_Res_Field=Entwickler|bernd670
    #Compiler_Res_Field=Release Datum|%date% %time%
    #Compiler_Res_Field=Programmgruppe|Spiele
    #Compiler_Res_Field=Original Dateiname|Sudoku.exe
    #Compiler_Res_Field=Version|1.0
    #Compiler_Run_Obfuscator=n
    #endregion ; ==> Compiler directives section

    [/autoit] [autoit][/autoit] [autoit]

    #region FileInstall
    If Not FileExists(@ScriptDir & "\Images") Then DirCreate(@ScriptDir & "\Images")
    FileInstall(".\Sudoku.dll", @ScriptDir & "\Sudoku.dll", 0)
    FileInstall(".\Images\Black.jpg", @ScriptDir & "\Images\Black.jpg",0)
    FileInstall(".\Images\Sudoku.ico", @ScriptDir & "\Images\Sudoku.ico",0)
    #endregion ; ==> FileInstall

    [/autoit] [autoit][/autoit] [autoit]

    #region Includes
    #include <GUIConstants.au3>
    #Include <GuiStatusBar.au3>
    #endregion ; ==> Includes

    [/autoit] [autoit][/autoit] [autoit]

    #region AutoItSetOptions
    Opt("GUIOnEventMode", 1)
    #endregion ; ==> AutoItSetOptions

    [/autoit] [autoit][/autoit] [autoit]

    #region Konstantendefinitionen
    Const $ciTop = 40
    Const $ciLeft = 20
    Const $cstrIniFile = @ScriptDir & "\Sudoku.ini"
    #endregion ; ==> Konstantendefinitionen

    [/autoit] [autoit][/autoit] [autoit]

    #region Variablendefinitionen

    [/autoit] [autoit][/autoit] [autoit]

    #region Variablen für alle Modi
    Dim $arField[9][9] ; Speichert die ControlID's der Inputfelder
    Dim $arLevels ; Array für die Spielstufen
    Dim $arGames ; Array für die Spiele in den Spielstufen
    Global $bGameMode = True ; True = Spielmodus, False = Editormodus
    Local $arPartsWidth[2] = [ 55, -1 ]
    Local $arPartsText[2] = [ "Let's go!", "" ]
    #endregion ; ==> Variablen für alle Modi

    [/autoit] [autoit][/autoit] [autoit]

    #region Variablen für den Spielmodus ($bGameMode = True)
    Dim $arResult[3][9] ; Zur Berechnung der Ergebnisse [0][x] = Zeile, [1][x] = Spalte, [2][x] = Block
    Global $bUnraveled = False ; True = Rätsel gelöst
    Global $bStarted = False ; True = Rätsel begonnen
    Global $bNoSolveMsg = False ; True = keine Message ausgeben wenn Spiel gelöst wurde
    Global $iStartTime ; Startzeit
    Global $iRunTime ; Spieldauer
    #endregion ; ==> Variablen für den Spielmodus ($bGameMode = True)

    [/autoit] [autoit][/autoit] [autoit]

    #region Variablen für den Editormodus ($bGameMode = False)
    Global $bLevelsChanged ; Ist True wenn sich an den Levels was geändert hat
    Global $bSheetSaveOK ; Ist True wenn das Blatt mit mehr als 21 Ziffern gefüllt ist
    Global $bSheetChanged ; Ist True wenn das Blatt verändert wurde
    Global $iGameIndex ; Speichert die aktuelle Spielnummer
    Global $strTempGame ; Zwischenspeicher für das aktuelle Spiel
    Global $strPreLevel ; Text der den Key in der INI-Section Levels vorangestellt ist
    #endregion ; ==> Variablen für den Editormodus ($bGameMode = False)

    [/autoit] [autoit][/autoit] [autoit]

    #endregion ; Variablendefinitionen

    [/autoit] [autoit][/autoit] [autoit]

    #region GUI-Erstellung
    $FrmMain = GUICreate("Sudoku", 633, 454, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "FormMainClose")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "FormMainMinimize")
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, "FormMainMaximize")
    GUISetOnEvent($GUI_EVENT_RESTORE, "FormMainRestore")
    $ModeMenu = GUICtrlCreateMenu("&Modus")
    $ModeMenuItemGame = GUICtrlCreateMenuItem("&Spiel", $ModeMenu);,0,1)
    GUICtrlSetOnEvent(-1, "ModeChange")
    GUICtrlSetState(-1, $GUI_CHECKED)
    $ModeMenuItemEdit = GUICtrlCreateMenuItem("&Editor", $ModeMenu);,1,1)
    GUICtrlSetOnEvent(-1, "ModeChange")
    $PicLeft = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft, $ciTop + 5, 5, 334, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicInnerLeft = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft + 113, $ciTop + 5, 5, 334, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicInnerRight = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft + 226, $ciTop + 5, 5, 334, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicRight = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft + 339, $ciTop + 5, 5, 334, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicTop = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft, $ciTop, 344, 5, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicInnerTop = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft + 5, $ciTop + 113, 334, 5, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicInnerBottom = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft + 5, $ciTop + 226, 334, 5, BitOR($SS_NOTIFY, $WS_GROUP))
    $PicBottom = GUICtrlCreatePic(@ScriptDir & "\Images\Black.jpg", $ciLeft, $ciTop + 339, 344, 5, BitOR($SS_NOTIFY, $WS_GROUP))
    For $iRow = 0 To 8
    $iTop = $ciTop + 8 + $iRow * 35 + Int($iRow / 3) * 8
    For $iColumn = 0 To 8
    $iLeft = $ciLeft + 8 + $iColumn * 35 + Int($iColumn / 3) * 8
    $arField[$iRow][$iColumn] = GUICtrlCreateInput("", $iLeft, $iTop, 32, 32, BitOR($ES_CENTER, $ES_NUMBER))
    GUICtrlSetOnEvent(-1, "FieldChange")
    GUICtrlSetLimit(-1, 1)
    GUICtrlSetFont(-1, 16, 400, 0, "Arial")
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    #region Controls für alle Modi (immer sichtbar)
    $LblLevels = GUICtrlCreateLabel("Level:", $ciLeft + 360, $ciTop + 5, 50, $WS_GROUP)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    $CBLevels = GUICtrlCreateCombo("", $ciLeft + 420, $ciTop + 5, 120, 100, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL, $WS_VSCROLL))
    GUICtrlSetOnEvent(-1, "LevelChange")
    $LblGames = GUICtrlCreateLabel("Spiel:", $ciLeft + 360, $ciTop + 30, 50)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    $CBGames = GUICtrlCreateCombo("", $ciLeft + 420, $ciTop + 30, 120, 100, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL, $WS_VSCROLL))
    GUICtrlSetOnEvent(-1, "GameChange")
    #endregion ; ==> Controls für alle Modi (immer sichtbar)

    [/autoit] [autoit][/autoit] [autoit]

    #region Controls für den Spielmodus (sichtbar wenn $bGameMode = True)
    $ButGenerateGame = GUICtrlCreateButton("Spiel &generieren", $ciLeft + 360, $ciTop + 250, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButGenerateGameClick")
    $ButSolve = GUICtrlCreateButton("Spiel &lösen", $ciLeft + 360, $ciTop + 280, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButSolveClick")
    $ButRestart = GUICtrlCreateButton("Spiel &neustarten", $ciLeft + 360, $ciTop + 310, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButRestartClick")
    #endregion ; ==> Controls für den Spielmodus (sichtbar wenn $bGameMode = True)

    [/autoit] [autoit][/autoit] [autoit]

    #region Controls für den Editormodus (sichtbar wenn $bGameMode = False)
    $ButChangeLevel = GUICtrlCreateButton("Levelbez. ä&ndern", $ciLeft + 360, $ciTop + 140, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButChangeLevelClick")
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButNewLevel = GUICtrlCreateButton("Neuer &Level", $ciLeft + 360, $ciTop + 170, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButNewLevelClick")
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButNewSheet = GUICtrlCreateButton("Neues &Blatt", $ciLeft + 360, $ciTop + 210, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButNewSheetClick")
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButDelSheet = GUICtrlCreateButton("Blatt lösch&en", $ciLeft + 360, $ciTop + 240, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButDelSheetClick")
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButSave = GUICtrlCreateButton("Blatt &speichern", $ciLeft + 360, $ciTop + 280, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButSaveClick")
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetState(-1, $GUI_HIDE)
    $ButUndo = GUICtrlCreateButton("Änderungen &verwerfen", $ciLeft + 360, $ciTop + 310, 190)
    GUICtrlSetFont(-1, 12, 600, 0, "Arial")
    GUICtrlSetOnEvent(-1, "ButUndoClick")
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetState(-1, $GUI_HIDE)
    #endregion ; ==> Controls für den Editormodus (sichtbar wenn $bGameMode = False)

    [/autoit] [autoit][/autoit] [autoit]

    $StatusBar = _GUICtrlStatusBarCreate($FrmMain, $arPartsWidth, $arPartsText)
    #endregion ; ==> GUI-Erstellung

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    #region Initialisierung
    $arLevels = IniReadSection($cstrIniFile, "Levels")
    If @error Then ; Fehler beim lesen der INI-Datei
    ButGenerateGameClick()
    GUICtrlSetState($CBLevels, $GUI_DISABLE)
    GUICtrlSetState($CBGames, $GUI_DISABLE)
    Else
    $strPreLevel = StringRegExp($arLevels[1][0], "(.*)\d+", 1)
    $strPreLevel = $strPreLevel[0]
    If $arLevels[0][0] > 1 Then
    $strLevels = ""
    For $iIndex = 1 To $arLevels[0][0]
    $strLevels &= $arLevels[$iIndex][1] & "|"
    Next
    $strLevels = StringTrimRight($strLevels, 1)
    GUICtrlSetData($CBLevels, $strLevels, StringLeft($strLevels, StringInStr($strLevels, "|") - 1))
    Else
    GUICtrlSetData($CBLevels, $arLevels[1][1], $arLevels[1][1])
    EndIf
    LevelChange()
    EndIf
    #endregion ; ==> Initialisierung

    [/autoit] [autoit][/autoit] [autoit]

    #region Hauptschleife
    While 1
    If $bGameMode = True Then ; im Spielmodus

    If $bUnraveled = True Then
    If (Not $bNoSolveMsg) And MsgBox(262148, "", "Sudoku wurde gelöst!" & @CRLF & "Glückwunsch!" & @CRLF & @CRLF & "Weiterspielen ?") = 7 Then ExitLoop
    $bUnraveled = False
    $bNoSolveMsg = False
    EndIf

    If $bStarted = True Then
    If BitAND(GUICtrlRead($ModeMenu), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ModeMenu, $GUI_DISABLE) ; Während des Spieles Modus-Menü deaktivieren
    If $iStartTime = 0 Then $iStartTime = TimerInit()
    If $iRunTime <> Int(TimerDiff($iStartTime) / 1000) Then
    $iRunTime = Int(TimerDiff($iStartTime) / 1000)
    _GUICtrlStatusBarSetText($StatusBar, StringFormat("%02i:%02i:%02i", Int($iRunTime / 3600), Int(Mod($iRunTime, 3600) / 60), Mod($iRunTime, 60)), 0)
    EndIf

    If BitAND(GUICtrlGetState($ButRestart), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ButRestart, $GUI_ENABLE)
    Else
    If BitAND(GUICtrlRead($ModeMenu), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ModeMenu, $GUI_ENABLE)
    _GUICtrlStatusBarSetText($StatusBar, "Let's go!", 0)
    If BitAND(GUICtrlGetState($ButRestart), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ButRestart, $GUI_DISABLE)
    EndIf

    Else ; im Editormodus
    If Not $bSheetChanged Then
    If BitAND(GUICtrlGetState($ButNewLevel), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ButNewLevel, $GUI_ENABLE)
    If BitAND(GUICtrlGetState($ButUndo), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ButUndo, $GUI_DISABLE)
    Else
    If BitAND(GUICtrlGetState($ButNewLevel), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ButNewLevel, $GUI_DISABLE)
    If BitAND(GUICtrlGetState($ButUndo), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ButUndo, $GUI_ENABLE)
    EndIf

    If StringChrCount($strTempGame, "0") = 81 Then
    If BitAND(GUICtrlGetState($ButNewSheet), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ButNewSheet, $GUI_DISABLE)
    If BitAND(GUICtrlGetState($CBLevels), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($CBLevels, $GUI_DISABLE)
    If BitAND(GUICtrlGetState($CBGames), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($CBGames, $GUI_DISABLE)
    Else
    If BitAND(GUICtrlGetState($CBLevels), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($CBLevels, $GUI_ENABLE)
    If BitAND(GUICtrlGetState($CBGames), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($CBGames, $GUI_ENABLE)
    If BitAND(GUICtrlGetState($ButNewSheet), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ButNewSheet, $GUI_ENABLE)
    EndIf

    If $bSheetChanged And $bSheetSaveOK Then
    If BitAND(GUICtrlGetState($ButSave), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($ButSave, $GUI_ENABLE)
    Else
    If BitAND(GUICtrlGetState($ButSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($ButSave, $GUI_DISABLE)
    EndIf

    EndIf

    $CGF = ControlGetFocus($FrmMain)
    If StringLeft($CGF, 4) = "Edit" Then
    If _IsPressed("25") Then ; Cursor Links
    If Int(StringMid($CGF, 5)) = 1 Then
    GUICtrlSetState($arField[8][8], $GUI_FOCUS)
    Else
    ControlSend($FrmMain, "", "", "+{TAB}")
    EndIf
    EndIf
    If _IsPressed("26") Then ; Cursor hoch
    Switch Int(StringMid($CGF, 5))
    Case 1
    GUICtrlSetState($arField[8][8], $GUI_FOCUS)
    Case 2 To 9
    GUICtrlSetState($arField[8][Int(StringMid($CGF, 5)) - 2], $GUI_FOCUS)
    Case Else
    GUICtrlSetState($arField[Int((StringMid($CGF, 5) - 10) / 9) ][Int(Mod(StringMid($CGF, 5) - 10, 9)) ], $GUI_FOCUS)
    EndSwitch
    EndIf
    If _IsPressed("27") Then ; Cursor rechts
    If Int(StringMid($CGF, 5)) = 81 Then
    GUICtrlSetState($arField[0][0], $GUI_FOCUS)
    Else
    ControlSend($FrmMain, "", "", "{TAB}")
    EndIf
    EndIf
    If _IsPressed("28") Then ; Cursor runter
    If Int(StringMid($CGF, 5)) >= 73 Then
    GUICtrlSetState($arField[0][Int(Mod(StringMid($CGF, 5) + 9, 9)) ], $GUI_FOCUS)
    Else
    GUICtrlSetState($arField[Int((StringMid($CGF, 5) + 8) / 9) ][Int(Mod(StringMid($CGF, 5) + 8, 9)) ], $GUI_FOCUS)
    EndIf
    EndIf
    EndIf
    Sleep(80)
    WEnd
    #endregion ; ==> Hauptschleife

    [/autoit] [autoit][/autoit] [autoit]

    #region Funktionen
    Func FormMainClose()
    If $bGameMode = False Then ; im Editormodus
    If $bSheetChanged Then
    $iAnswer = MsgBox(262436, "Beenden", "Wenn Sie jetzt beenden gehen" & @CRLF & "alle Änderungen verloren!" & @CRLF & @CRLF & "Soll wirklich beendet werden?")
    If $iAnswer = 7 Then Return
    EndIf
    EndIf
    Exit
    EndFunc ;==>FormMainClose

    [/autoit] [autoit][/autoit] [autoit]

    Func FormMainMaximize()
    EndFunc ;==>FormMainMaximize
    Func FormMainMinimize()
    EndFunc ;==>FormMainMinimize
    Func FormMainRestore()
    EndFunc ;==>FormMainRestore

    [/autoit] [autoit][/autoit] [autoit]

    #region Funktionen für alle Modi
    ; ModeChange -> wechsel zwischen Spiel und Editor
    Func ModeChange()
    Switch @GUI_CtrlId
    Case $ModeMenuItemGame ; In Spielmodus schalten
    If $bGameMode = False Then
    If $bLevelsChanged Or $bSheetChanged Then
    $iAnswer = MsgBox(262436, "Moduswechsel", "Wenn Sie jetzt in den Spielmodus schalten" & @CRLF & "gehen alle Änderungen verloren!" & @CRLF & @CRLF & "Wollen Sie wirklich umschalten?")
    If $iAnswer = 7 Then Return
    EndIf
    SetStates(True) ; Initialisierung für Spielmodus
    LevelChange()
    EndIf
    Case $ModeMenuItemEdit ; In Editormodus schalten
    If $bGameMode = True Then
    If Not FileExists(@ScriptDir & "\Sudoku.ini") Then
    $strPreLevel = "Level"
    Dim $arLevels[2][2]
    Dim $arGames[2][2]
    $arLevels[0][0] = 1
    $arLevels[1][0] = $strPreLevel & "1"
    $arLevels[1][1] = "Level 1"
    GUICtrlSetData($CBLevels, "Level 1", "Level 1")
    $arGames[0][0] = 1
    $arGames[1][0] = "001"
    $arGames[1][1] = StringFormat("%081s", "0")
    GUICtrlSetData($CBGames, "001", "001")
    IniWriteSection($cstrIniFile, "Levels", $arLevels)
    IniWriteSection($cstrIniFile, $arLevels[1][0], $arGames)
    EndIf
    SetStates(False) ; Initialisierung für Editmodus
    LevelChange()
    EndIf
    EndSwitch
    EndFunc ;==>ModeChange

    [/autoit] [autoit][/autoit] [autoit]

    ; Initialisierung je nach Modus
    Func SetStates($bMode)
    If $bMode Then ; Spielmodus
    ;~ ConsoleWrite("Set Gamemode" & @CRLF)
    WinSetTitle($FrmMain, "", "Sudoku")
    GUICtrlSetState($ModeMenuItemGame, $GUI_CHECKED)
    GUICtrlSetState($ModeMenuItemEdit, $GUI_UNCHECKED)
    GUICtrlSetState($ButGenerateGame, $GUI_SHOW)
    GUICtrlSetState($ButSolve, $GUI_SHOW)
    GUICtrlSetState($ButRestart, $GUI_SHOW)
    GUICtrlSetState($ButChangeLevel, $GUI_HIDE)
    GUICtrlSetState($ButNewLevel, $GUI_HIDE)
    GUICtrlSetState($ButNewSheet, $GUI_HIDE)
    GUICtrlSetState($ButDelSheet, $GUI_HIDE)
    GUICtrlSetState($ButSave, $GUI_HIDE)
    GUICtrlSetState($ButUndo, $GUI_HIDE)
    $bGameMode = True
    $bUnraveled = False
    $bStarted = False
    Else ; Editormodus
    ;~ ConsoleWrite("Set Editmode" & @CRLF)
    WinSetTitle($FrmMain, "", "Sudoku - Level Editor")
    GUICtrlSetState($ModeMenuItemGame, $GUI_UNCHECKED)
    GUICtrlSetState($ModeMenuItemEdit, $GUI_CHECKED)
    GUICtrlSetState($ButGenerateGame, $GUI_HIDE)
    GUICtrlSetState($ButSolve, $GUI_HIDE)
    GUICtrlSetState($ButRestart, $GUI_HIDE)
    GUICtrlSetState($ButChangeLevel, $GUI_SHOW)
    GUICtrlSetState($ButNewLevel, $GUI_SHOW)
    GUICtrlSetState($ButNewSheet, $GUI_SHOW)
    GUICtrlSetState($ButDelSheet, $GUI_SHOW)
    GUICtrlSetState($ButSave, $GUI_SHOW)
    GUICtrlSetState($ButUndo, $GUI_SHOW)
    $bGameMode = False
    $bLevelsChanged = False
    $bSheetChanged = False
    $bSheetSaveOK = False
    EndIf
    GUICtrlSetState($CBLevels, $GUI_ENABLE)
    GUICtrlSetState($CBGames, $GUI_ENABLE)

    Return $bMode
    EndFunc ;==>SetStates

    [/autoit] [autoit][/autoit] [autoit]

    ; FieldChange -> eines der Inputfelder wurde geändert
    Func FieldChange()
    If $bGameMode = True Then ; im Spielmodus
    For $iRow = 0 To 8
    $arResult[0][$iRow] = 0
    For $iColumn = 0 To 8
    If $iRow = 0 Then
    $arResult[1][$iColumn] = 0
    $arResult[2][$iColumn] = 0
    EndIf
    $iValue = Int(GUICtrlRead($arField[$iRow][$iColumn]))
    $arResult[0][$iRow] += $iValue ; Zeilenergebnis
    $arResult[1][$iColumn] += $iValue ; Spaltenergebnis
    $arResult[2][Int($iRow / 3) * 3 + Int($iColumn / 3) ] += $iValue ; Blockergebnis
    Next
    Next
    $bUnraveled = True
    For $iIndex = 0 To 8
    If $arResult[0][$iIndex] <> 45 Or $arResult[1][$iIndex] <> 45 Or $arResult[2][$iIndex] <> 45 Then
    $bUnraveled = False
    ExitLoop
    EndIf
    Next
    $bStarted = True
    Else ; im Editormodus
    $iCounter = 0
    $arGames[$iGameIndex][1] = ""
    For $iRow = 0 To 8
    For $iColumn = 0 To 8
    $iValue = Int(GUICtrlRead($arField[$iRow][$iColumn]))
    If $iValue > 0 Then
    $iCounter += 1
    $arGames[$iGameIndex][1] &= String($iValue)
    Else
    $arGames[$iGameIndex][1] &= "0"
    EndIf
    Next
    Next
    $bSheetSaveOK = False
    If $iCounter > 13 Then $bSheetSaveOK = True
    $bSheetChanged = True
    _GUICtrlStatusBarSetText($StatusBar, $iCounter & " Ziffern")
    EndIf
    EndFunc ;==>FieldChange

    [/autoit] [autoit][/autoit] [autoit]

    ; LevelChange -> Schwierigkeitsstufe wurde geändert
    Func LevelChange()
    $strLevel = GUICtrlRead($CBLevels)
    For $iIndex = 1 To $arLevels[0][0]
    If $arLevels[$iIndex][1] == $strLevel Then ExitLoop
    Next
    $arGames = IniReadSection($cstrIniFile, $arLevels[$iIndex][0])
    If @error Then
    MsgBox(4096, "", "Fehler beim lesen der Ini-Datei!")
    Exit
    EndIf
    Switch $arGames[0][0]
    Case 0
    MsgBox(4096, "", "Für diesen Level existieren keine Spiele")
    Return
    Case 1
    GUICtrlSetData($CBGames, "|" & $arGames[1][0], $arGames[1][0])
    If $bGameMode And (StringChrCount($arGames[1][1], "0") = 81) Then
    ButGenerateGameClick()
    GUICtrlSetState($CBLevels, $GUI_DISABLE)
    GUICtrlSetState($CBGames, $GUI_DISABLE)
    Return
    EndIf
    Case Else
    $strGames = ""
    For $iIndex = 1 To $arGames[0][0]
    $strGames &= $arGames[$iIndex][0] & "|"
    Next
    $strGames = StringTrimRight($strGames, 1)
    GUICtrlSetData($CBGames, "|" & $strGames, StringLeft($strGames, StringInStr($strGames, "|") - 1))
    EndSwitch
    GameChange()
    EndFunc ;==>LevelChange

    [/autoit] [autoit][/autoit] [autoit]

    ; GameChange -> Neues Spiel wurde gewählt
    Func GameChange()
    $strGame = GUICtrlRead($CBGames)
    For $iIndex = 1 To $arGames[0][0]
    If $arGames[$iIndex][0] == $strGame Then ExitLoop
    Next
    For $iRow = 8 To 0 Step - 1
    For $iColumn = 8 To 0 Step - 1
    $iValue = StringMid($arGames[$iIndex][1], $iRow * 9 + $iColumn + 1, 1)
    If $iValue <> 0 Then
    GUICtrlSetData($arField[$iRow][$iColumn], $iValue)
    If $bGameMode = True Then ; im Spielmodus
    GUICtrlSetStyle($arField[$iRow][$iColumn], BitOR($ES_CENTER, $ES_NUMBER, $ES_READONLY))
    Else ; im Editormodus
    GUICtrlSetStyle($arField[$iRow][$iColumn], BitOR($ES_CENTER, $ES_NUMBER))
    EndIf
    Else
    GUICtrlSetData($arField[$iRow][$iColumn], "")
    GUICtrlSetStyle($arField[$iRow][$iColumn], BitOR($ES_CENTER, $ES_NUMBER))
    EndIf
    Next
    Next

    If $bGameMode = True Then ; im Spielmodus
    $bStarted = False
    $iStartTime = 0
    Else ; im Editormodus
    $strTempGame = $arGames[$iIndex][1]
    $iGameIndex = $iIndex
    _GUICtrlStatusBarSetText($StatusBar, 81 - StringChrCount($strTempGame, "0") & " Ziffern")
    EndIf
    EndFunc ;==>GameChange
    #endregion ; ==> Funktionen für alle Modi

    [/autoit] [autoit][/autoit] [autoit]

    #region Funktionen für den Spielmodus ($bGameMode = True)
    ; Button "Spiel generieren" wurde betätigt
    Func ButGenerateGameClick()
    $szField = GenerateGame(Random(21,35,1),0)
    If Not @error Then
    If $bStarted And MsgBox(262436, "Spiel generieren", "Soll das aktuelle Blatt überschrieben werden?") = 7 Then Return

    For $iRow = 8 To 0 Step - 1
    For $iColumn = 8 To 0 Step - 1
    $iValue = StringMid($szField, $iRow * 9 + $iColumn + 1, 1)
    If $iValue <> 0 Then
    GUICtrlSetData($arField[$iRow][$iColumn], $iValue)
    If $bGameMode = True Then ; im Spielmodus
    GUICtrlSetStyle($arField[$iRow][$iColumn], BitOR($ES_CENTER, $ES_NUMBER, $ES_READONLY))
    Else ; im Editormodus
    GUICtrlSetStyle($arField[$iRow][$iColumn], BitOR($ES_CENTER, $ES_NUMBER))
    EndIf
    Else
    GUICtrlSetData($arField[$iRow][$iColumn], "")
    GUICtrlSetStyle($arField[$iRow][$iColumn], BitOR($ES_CENTER, $ES_NUMBER))
    EndIf
    Next
    Next

    $bStarted = False
    $iStartTime = 0
    EndIf

    EndFunc ;==>ButGenerateGameClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Generiert ein Spiel nach einem Algorithmus von Moritz Lenz -> http://moritz.faui2k3.org/de/yasss
    Func GenerateGame($nDifficulty, $nDeviation = 0)
    $arDLL = DllCall("Sudoku.dll", "str", "SudokuGenerate", "int", $nDifficulty, "int", $nDeviation)
    If IsArray($arDLL) Then Return SetError(0, 0, $arDLL[0])
    Return SetError(1, 0, "")
    EndFunc ;==>GenerateGame

    [/autoit] [autoit][/autoit] [autoit]

    Func ButSolveClick()
    Local $szField = ""

    If $bUnraveled = True Then Return

    If MsgBox(262436, "Spiel lösen", "Soll das jetzt automatisch gelöst werden?") = 7 Then Return

    For $iRow = 0 To 8
    For $iColumn = 0 To 8
    $chValue = GUICtrlRead($arField[$iRow][$iColumn])
    If $chValue = "" Then
    $szField &= "0"
    Else
    $szField &= $chValue
    EndIf
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $arDLL = DllCall("Sudoku.dll", "str", "SudokuSolve", "str", $szField)
    If IsArray($arDLL) Then $szField = $arDLL[0]

    For $iRow = 8 To 0 Step -1
    For $iColumn = 8 To 0 Step -1
    $chValue = StringMid($szField, $iRow * 9 + $iColumn + 1, 1)
    If $chValue <> 0 Then GUICtrlSetData($arField[$iRow][$iColumn], $chValue)
    Next
    Next
    FieldChange()
    $bNoSolveMsg = True
    EndFunc ;==>ButSolveClick

    [/autoit] [autoit][/autoit] [autoit]

    Func ButRestartClick()
    GameChange()
    EndFunc ;==>ButRestartClick
    #endregion ; ==> Funktionen für den Spielmodus ($bGameMode = True)

    [/autoit] [autoit][/autoit] [autoit]

    #region Funktionen für den Editormodus ($bGameMode = False)
    ; Button "Levelbez. ändern" wurde betätigt
    Func ButChangeLevelClick()
    $StrOldName = GUICtrlRead($CBLevels)
    For $iIndex = 1 To $arLevels[0][0]
    If $arLevels[$iIndex][1] == $StrOldName Then ExitLoop
    Next
    $strNewName = InputBox("Levelbezeichnung ändern", "Bitte neue Levelbezeichnung eingeben!" & @CRLF & @CRLF & _
    "Die derzeitige Bezeichnung ist: " & $StrOldName)
    If $strNewName <> $StrOldName And StringLen($strNewName) Then
    $arLevels[$iIndex][1] = $strNewName
    $bLevelsChanged = True
    $strLevels = ""
    For $iIndex = 1 To $arLevels[0][0]
    $strLevels &= $arLevels[$iIndex][1] & "|"
    Next
    $strLevels = StringTrimRight($strLevels, 1)
    GUICtrlSetData($CBLevels, $strLevels, $strNewName)
    EndIf
    EndFunc ;==>ButChangeLevelClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Neuer Level" wurde betätigt
    Func ButNewLevelClick()
    $strNewName = InputBox("Level hinzufügen", "Bitte Bezeichnung für den neuen Level eingeben!")
    If StringLen($strNewName) Then
    ReDim $arLevels[$arLevels[0][0] + 2][2]
    $arLevels[0][0] += 1
    $strLevels = ""
    For $iIndex = 1 To $arLevels[0][0] - 1
    $strLevels &= $arLevels[$iIndex][1] & "|"
    If Int(StringMid($arLevels[$iIndex][0], 6)) >= Int($arLevels[$arLevels[0][0]][0]) Then
    $arLevels[$arLevels[0][0]][0] = Int(StringMid($arLevels[$iIndex][0], 6)) + 1
    EndIf
    Next
    $arLevels[$arLevels[0][0]][0] = $strPreLevel & $arLevels[$arLevels[0][0]][0]
    $arLevels[$arLevels[0][0]][1] = $strNewName
    $strLevels &= $strNewName
    GUICtrlSetData($CBLevels, $strLevels, $strNewName)
    ReDim $arGames[2][2]
    $arGames[0][0] = 1
    $arGames[1][0] = "001"
    $arGames[1][1] = StringFormat("%081s", "0")
    GUICtrlSetData($CBGames, "001", "001")
    GameChange()
    $bLevelsChanged = True
    $bSheetChanged = True
    $bSheetSaveOK = False
    EndIf
    EndFunc ;==>ButNewLevelClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Neues Blatt" wurde betätigt
    Func ButNewSheetClick()
    ReDim $arGames[$arGames[0][0] + 2][2]
    $arGames[0][0] += 1
    $arGames[$arGames[0][0]][1] = StringFormat("%081s", "0")
    Switch $arGames[0][0]
    Case 0
    MsgBox(4096, "", "Für diesen Level existieren keine Spiele!")
    Return
    Case 1
    GUICtrlSetData($CBGames, "|" & $arGames[1][0], $arGames[1][0])
    Case Else
    $strGames = ""
    For $iIndex = 1 To $arGames[0][0] - 1
    $strGames &= $arGames[$iIndex][0] & "|"
    If Int($arGames[$iIndex][0]) >= Int($arGames[$arGames[0][0]][0]) Then
    $arGames[$arGames[0][0]][0] = StringFormat("%03i", Int($arGames[$iIndex][0]) + 1)
    EndIf
    Next
    $strGames &= $arGames[$arGames[0][0]][0]
    GUICtrlSetData($CBGames, "|" & $strGames, $arGames[$arGames[0][0]][0])
    EndSwitch
    GameChange()
    $bSheetSaveOK = False
    EndFunc ;==>ButNewSheetClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Blatt löschen" wurde betätigt
    Func ButDelSheetClick()
    If MsgBox(262436, "Blatt löschen", "Soll das Blatt wirklich gelöscht werden?") = 6 Then
    $iCounter = 1
    $strGames = ""
    If $arGames[0][0] = 1 Then
    $arGames[1][1] = StringFormat("%081s", "0")
    Else
    For $iIndex = 1 To $arGames[0][0]
    If $iIndex = $iGameIndex Then ContinueLoop
    $arGames[$iCounter][0] = StringFormat("%03i", $iCounter)
    $arGames[$iCounter][1] = $arGames[$iIndex][1]
    $strGames &= $arGames[$iCounter][0] & "|"
    $iCounter += 1
    Next
    $strGames = StringTrimRight($strGames, 1)
    GUICtrlSetData($CBGames, "|" & $strGames, StringLeft($strGames, StringInStr($strGames, "|") - 1))
    $arGames[0][0] -= 1
    ReDim $arGames[$arGames[0][0] + 1][2]
    EndIf
    ButSaveClick()
    EndIf
    EndFunc ;==>ButDelSheetClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Blatt speichern" wurde betätigt
    Func ButSaveClick()
    If $bLevelsChanged Then
    IniWriteSection($cstrIniFile, "Levels", $arLevels)
    If @error Then
    MsgBox(4096, "", "Fehler beim schreiben der Ini-Datei!")
    Exit
    EndIf
    $bLevelsChanged = False
    EndIf
    $strLevel = GUICtrlRead($CBLevels)
    For $iIndex = 1 To $arLevels[0][0]
    If $arLevels[$iIndex][1] == $strLevel Then ExitLoop
    Next
    IniWriteSection($cstrIniFile, $arLevels[$iIndex][0], $arGames)
    If @error Then
    MsgBox(4096, "", "Fehler beim schreiben der Ini-Datei!")
    Exit
    EndIf
    GameChange()
    $bSheetChanged = False
    $bSheetSaveOK = False
    EndFunc ;==>ButSaveClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Button "Änderungen verwerfen" wurde betätigt
    Func ButUndoClick()
    $arGames[$iGameIndex][1] = $strTempGame
    GameChange()
    $bSheetChanged = False
    $bSheetSaveOK = False
    EndFunc ;==>ButUndoClick

    [/autoit] [autoit][/autoit] [autoit]

    ; Anzahl eines Zeichens im String zählen
    Func StringChrCount($String, $char)
    StringReplace($String, $char, $char)
    Return @extended
    EndFunc ;==>StringChrCount
    #endregion ; ==> Funktionen für den Editormodus ($bGameMode = False)

    [/autoit] [autoit][/autoit] [autoit]

    #endregion ; ==> Funktionen

    [/autoit]

    Edit: Ich habe die Initialisierungsroutine geändert, jetzt kann man auch spielen wenn noch keine Levels mit dem Editor erstellt wurden.

    Edit2: Wie so oft hat sich durch das beheben eines Fehlers gleich ein weiterer Fehler eingeschliechen;-) jetzt sollte es funktionieren!

  • hilfe zu regex...

    • bernd670
    • 9. Juni 2007 um 18:30

    Der ist doch richtig!

    [autoit]

    $messageIE = StringRegExp('"><B>test</B>: testtext<SCRIPT>delmake',"(?i).*\: (.*)<script>.*",1)

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"",$messageIE[0])

    [/autoit][autoit][/autoit][autoit][/autoit]
  • hilfe zu regex...

    • bernd670
    • 9. Juni 2007 um 18:27

    Ist das jetzt der bei dem Du Hife brauchst oder der den Du selbst geschaft hast?

  • hilfe zu regex...

    • bernd670
    • 9. Juni 2007 um 17:27

    Bei mir wird's korrekt zurückgegeben!

    Spoiler anzeigen
    [autoit]

    $html = '<head>' & @CRLF & _
    '<title></title>' & @CRLF & _
    '</head>' & @CRLF & _
    '' & @CRLF & _
    '<body bgcolor="#000000">' & @CRLF & _
    '<p align="center">' & @CRLF & _
    '<table border="1" width="800" height="11" background="back.gif">' & @CRLF & _
    '<tr>' & @CRLF & _
    '<td width="100%" height="118">' & @CRLF & _
    '&nbsp;' & @CRLF & _
    '</td>' & @CRLF & _
    '</tr>' & @CRLF & _
    '<tr>' & @CRLF & _
    '<td width="100%" height="436">' & @CRLF & _
    '<p align="center">Hier können Sie ihre Dateien kostenlos auf einen Server' & @CRLF & _
    'Hochladen um sie dann zu verlinken oder weiterzuschicken.<p align="center">Die Maximale Größe einer Datei darf höchstens' & @CRLF & _
    '1.5 Megabyte betragen.&nbsp;<p align="center"> Wenn die Datei größer als 1.5' & @CRLF & _
    'Megabyte ist, wird die Datei ignoriert.' & @CRLF & _
    '<p align="center">Illegale Dateien sind nicht gestattet und werden so' & @CRLF & _
    'schnell wie möglich entfernt.</p>' & @CRLF & _
    '<p align="center">Bitte haben Sie geduld, das Hochladen kann mehrere Minuten in Anspruch nehmen!.</p>' & @CRLF & _
    '<p>' & @CRLF & _
    '<p align="center">Die Datei wurde erfolgreich auf den Server geladen.<br>Url der Datei: <a href="http://fileupload2.fi.funpic.de/myfile.txt1181396960.txt"target="_bla' & @CRLF & _
    'nk"">http://fileupload2.fi.funpic.de/myfile.txt1181396960.txt</a><br><br><br>Dies ist der Pfad zu ihrer Datei.<br><input name="kopie" value="http://fileupload2.fi.funpic.de/myfile.txt1181396960.txt" type="datei" size=80><br><br><a href="http://fileupload2.fi.funpic.de/Upload.php">Zurück</a></p> </tr>' & @CRLF & _
    '<tr>' & @CRLF & _
    '<td width="100%" height="48">' & @CRLF & _
    '<p align="center">&nbsp;</td>' & @CRLF & _
    '</tr>' & @CRLF & _
    '</table>'

    [/autoit] [autoit][/autoit] [autoit]

    $link=StringRegExp($html,'(?i).*value="(.*)" type.*',1)
    MsgBox(0,"",$link[0])

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • hilfe zu regex...

    • bernd670
    • 9. Juni 2007 um 16:44

    Wieso umgedrehtes !, dass ist der Buchstabe i wie Igel!

    Probiers mal so:

    [autoit]

    $link=StringRegExp($html,'(?i).*value="(.*)" type.*',1)

    [/autoit]
  • Simconnect SDK DLLCall ?

    • bernd670
    • 9. Juni 2007 um 16:32

    Hallo,

    es ist etwas komplizierter als ich erst dachte, dass Problem ist das die SimConnect.dll noch nicht mal mit Dependency Walker auslesen kann. Um es mit AutoIt zu verwenden müsste ich noch eine DLL programmieren die als schnittstelle zur SimConnect.dll fungiert. Dafür brauch etwas mehr Zeit und den Flug Simulator bräuchte ich auch noch und den möcht mir ehrlich gesagt nicht kaufen.

    Sorry!

    PS: Ich bin aber immer noch im Internet am suchen ob ich nicht was ähnliches finde das ich einfach etwas umprogrammieren kann.

  • hilfe zu regex...

    • bernd670
    • 9. Juni 2007 um 16:18

    Es sollte (?i) heissen und nicht (?!), oder?

    Evtl. mal den Seitenquellcode posten!

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™