ständige windows fehlermeldung beim beenden des scripts

  • ich habe ein problem....es kommt ständig eine fehlermeldung beim beenden, dass das script nicht mehr reagiert :( kann mir einer weiter helfen und verraten woran das liegen könnte? :)

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    ;~ #include "Z:\BackUps\AutoIt - Scripts\##Fertig\Background\UDF - Sammlung.au3"
    #include <GDIPlus.au3>
    #Include <Color.au3>

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

    HotKeySet("{ESC}", "_Binaeruhr_Terminate")

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

    Global $x_schwarz = 0x000000, $x_on = 0xF61A00, $x_off = 0xF0F0F0
    Global $a_ellipse_hour[5][2] = [[110, 380], [110, 300], [110, 220], [10, 380], _
    [10, 300]]
    Global $a_ellipse_min[6][2] = [[310, 380], [310, 300], [310, 220], [210, 380], _
    [210, 300], [210, 220]]
    Global $a_ellipse_sec[6][2] = [[510, 380], [510, 300], [510, 220], [410, 380], _
    [410, 300], [410, 220]]

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

    _GDIPlus_StartUp()

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

    Global $h_stift = _GDIPlus_PenCreate("0xFF" & Hex(_ColorGetRed($x_schwarz), 2) & Hex(_ColorGetGreen($x_schwarz), 2) & Hex(_ColorGetBlue($x_schwarz), 2), 1)
    Global $h_on = _GDIPlus_BrushCreateSolid("0xFF" & Hex(_ColorGetRed($x_on), 2) & Hex(_ColorGetGreen($x_on), 2) & Hex(_ColorGetBlue($x_on), 2))
    Global $h_off = _GDIPlus_BrushCreateSolid("0xFF" & Hex(_ColorGetRed($x_off), 2) & Hex(_ColorGetGreen($x_off), 2) & Hex(_ColorGetBlue($x_off), 2))

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

    Global $h_GUI = GUICreate("Binäruhr", 600, 480, -1, -1, BitOR($WS_MINIMIZEBOX,$WS_POPUP,$WS_GROUP),$WS_EX_TOPMOST)
    GUISetOnEvent(-3, "_Binaeruhr_Terminate")
    GUISetBkColor($x_schwarz, $h_GUI)
    Global $h_UhrzeitDigital = GUICtrlCreateLabel(@HOUR & ":" & @MIN & ":" & @SEC, 70, 50, 460, 150)
    GUICtrlSetBkColor($h_UhrzeitDigital, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont($h_UhrzeitDigital, 85, 400, 0, "Arial")
    GUICtrlSetColor($h_UhrzeitDigital, $x_on)
    GUISetCursor(16, 1, $h_GUI)
    Global $h_graphic = _GDIPlus_GraphicsCreateFromHWND($h_GUI)
    _GDIPlus_GraphicsSetSmoothingMode($h_graphic, 2)
    Global $h_trans = GUICreate("", @DesktopWidth + 5, @DesktopHeight + 5, -5, -5, $WS_POPUP, $DS_MODALFRAME)
    GUISetBkColor($x_schwarz)
    WinSetTrans($h_trans, "", 60)
    GUISetState(@SW_SHOW, $h_trans)
    GUISetCursor(16, 1, $h_trans)
    ;~ _GUIFadeInOut($h_GUI, True, 8)
    GUISetState(@SW_SHOW, $h_GUI)

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

    While True
    Sleep(50)
    _Binaeruhr_Update()
    WEnd

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

    Func _Binaeruhr_Terminate()
    ;~ _GUIFadeInOut($h_GUI, False, 8)
    _GDIPlus_GraphicsDispose($h_graphic)
    _GDIPlus_PenDispose($h_stift)
    _GDIPlus_BrushDispose($x_on)
    _GDIPlus_BrushDispose($x_off)
    _GDIPlus_Shutdown()
    GUIDelete($h_GUI)
    GUIDelete($h_trans)
    Exit
    EndFunc

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

    Func _Punkt($i_on, $i_x, $i_y)
    If $i_on = 1 Then
    Local $h_farbe = $h_on
    Else
    Local $h_farbe = $h_off
    EndIf
    _GDIPlus_GraphicsFillEllipse($h_graphic, $i_x, $i_y, 70, 70, $h_farbe)
    _GDIPlus_GraphicsDrawEllipse($h_graphic, $i_x, $i_y, 70, 70, $h_stift)
    EndFunc

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

    Func _Binaeruhr_Update()
    If GUICtrlRead($h_UhrzeitDigital) <> @HOUR & ":" & @MIN & ":" & @SEC Then GUICtrlSetData($h_UhrzeitDigital, @HOUR & ":" & @MIN & ":" & @SEC)
    Local $b_time = _IntegerToBinary(@SEC)

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

    If StringLen($b_time) < 6 Then
    Do
    $b_time = "0" & $b_time
    Until StringLen($b_time) = 6
    EndIf

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

    Local $a_sekunde = StringSplit($b_time, "")
    $a_sekunde = _ArrayElementeTauschen($a_sekunde)

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

    For $i = 1 To $a_sekunde[0]
    _Punkt($a_sekunde[$i], $a_ellipse_sec[$i - 1][0], $a_ellipse_sec[$i - 1][1])
    Next

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

    $b_time = _IntegerToBinary(@MIN)

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

    If StringLen($b_time) < 6 Then
    Do
    $b_time = "0" & $b_time
    Until StringLen($b_time) = 6
    EndIf

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

    Local $a_minute = StringSplit($b_time, "")
    $a_minute = _ArrayElementeTauschen($a_minute)

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

    For $i = 1 To $a_minute[0]
    _Punkt($a_minute[$i], $a_ellipse_min[$i - 1][0], $a_ellipse_min[$i - 1][1])
    Next

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

    $b_time = _IntegerToBinary(@HOUR)

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

    If StringLen($b_time) < 5 Then
    Do
    $b_time = "0" & $b_time
    Until StringLen($b_time) = 5
    EndIf

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

    Local $a_hour = StringSplit($b_time, "")
    $a_hour = _ArrayElementeTauschen($a_hour)

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

    For $i = 1 To $a_hour[0]
    _Punkt($a_hour[$i], $a_ellipse_hour[$i - 1][0], $a_ellipse_hour[$i - 1][1])
    Next
    EndFunc

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

    Func _IntegerToBinary($v_number)
    $b_binary = ""
    Do
    $b_binary = Mod($v_number, 2) & $b_binary
    $v_number = Floor($v_number/2)
    Until $v_number = 0
    Return $b_binary
    EndFunc

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

    Func _ArrayElementeTauschen($a_array)
    Local $v_rubbish

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

    If Mod($a_array[0], 2) = 0 Then
    For $i = 1 To ($a_array[0] / 2)
    $v_rubbish = $a_array[$i]
    $a_array[$i] = $a_array[$a_array[0] - $i + 1]
    $a_array[$a_array[0] - $i + 1] = $v_rubbish
    Next
    Else
    For $i = 1 To (($a_array[0] - 1) / 2)
    $v_rubbish = $a_array[$i]
    $a_array[$i] = $a_array[$a_array[0] - $i + 1]
    $a_array[$a_array[0] - $i + 1] = $v_rubbish
    Next
    EndIf
    Return $a_array
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Was mir direkt ins Auge gesprungen ist, waren die Zeilen 22 bis 24...
    Es lässt sich folgendermaßen so kürzen:

    [autoit]

    Global $h_stift = _GDIPlus_PenCreate(0xFF000000 + $x_schwarz)
    Global $h_on = _GDIPlus_BrushCreateSolid(0xFF000000 + $x_on)
    Global $h_off = _GDIPlus_BrushCreateSolid(0xFF000000 + $x_off)

    [/autoit]

    Okey,... Nun zu deinen eigentlichen Problem:
    Du versuchst in der Funktion _Binaeruhr_Terminate() zwei vorher definierte Hexdezimalzahlen frei zu geben:

    [autoit]

    Func _Binaeruhr_Terminate()
    ;~ _GUIFadeInOut($h_GUI, False, 8)
    _GDIPlus_GraphicsDispose($h_graphic)
    _GDIPlus_PenDispose($h_stift)
    _GDIPlus_BrushDispose($x_on) ; Hier -> $x_on in $h_on ändern!
    _GDIPlus_BrushDispose($x_off) ; Hier -> $x_off in $h_off ändern!
    _GDIPlus_Shutdown()
    GUIDelete($h_GUI)
    GUIDelete($h_trans)
    Exit
    EndFunc

    [/autoit]