GUI Status Bar Bug?!?

  • Sehr verzwickte sache. Ich werde ich überprüfung wohl erstmal rauslassen vllt sollte jemand den Bug noch im Englischen Forum bekanntgeben,(fals nicht bereits irgendwo aufgeführt)

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Vielleicht ist das auch ein Problem des Compilers auf x64? Probiert es doch mal mit einer 32bit-Exe, die auf einem 32bit-System kompiliert wurde.

  • Das könnte noch ne Idee sein, jedoch beitze ich selbst leider nur ne x64 Verion von Windoof ^^
    vllt kanns ja mal wer mit der x86 Version testen und dann berichten

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    • Offizieller Beitrag

    Ich weiß nicht wieviele Parts du später verwendest, wenn es nur 1 ist dann sollte es so klappen:

    Spoiler anzeigen
    [autoit]

    #include <GuiStatusBar.au3>
    #include <WinAPI.au3>

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

    Global $bTest = True

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

    Opt("GUIOnEventMode", 1)
    $hGui = GUICreate("Test", 200, 200)
    Local $aParts[3] = [150, -1]
    $hStatus = _GUICtrlStatusBar_Create($hGui)
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    _GUICtrlStatusBar_SetText($hStatus, "Bereit...", 0)
    GUISetOnEvent(-3, "_exit")
    GUISetState()

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

    AdlibRegister("Chance", 2000)

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

    While 1
    If $bTest Then
    If _WinAPI_GetWindowText ($hStatus) <> "Warte..." Then _GUICtrlStatusBar_SetText($hStatus, "Warte...", 0)
    Else
    If _WinAPI_GetWindowText ($hStatus) <> "Bereit..." Then _GUICtrlStatusBar_SetText($hStatus, "Bereit...", 0)
    EndIf
    Sleep(100)
    WEnd

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

    Func Chance()
    Local $aText[10] = ["Test", "loooooool", "huhuhuuhuh", "12345", "nixxxx", "hmmmm", "naaaaaja", "blaaaaaa", "bkuuub", "soooo"]
    _GUICtrlStatusBar_SetText($hStatus, $aText[Random(0, UBound($aText) - 1, 1)], 0)
    Sleep(1000)
    $bTest = Random(0, 1, 1)
    EndFunc ;==>Chance

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

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]


    Edit ich hab glaub ich den Fehler in der UDF gefunden.

    [autoit]

    Func _GUICtrlStatusBar_GetText($hWnd, $iPart)
    If $Debug_SB Then __UDF_ValidateClassName($hWnd, $__STATUSBARCONSTANT_ClassName)

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

    Local $fUnicode = _GUICtrlStatusBar_GetUnicodeFormat($hWnd)

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

    Local $iBuffer = _GUICtrlStatusBar_GetTextLength($hWnd, $iPart)
    If $iBuffer = 0 Then Return SetError(1, 0, "")

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

    Local $tBuffer
    If $fUnicode Then
    $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]")
    ;~ $iBuffer *= 2 Wenn diese Zeile auskommentiert ist funzt die Funktion.
    Else
    $tBuffer = DllStructCreate("char Text[" & $iBuffer & "]")
    EndIf
    Local $pBuffer = DllStructGetPtr($tBuffer)
    If _WinAPI_InProcess($hWnd, $__ghSBLastWnd) Then
    _SendMessage($hWnd, $SB_GETTEXTW, $iPart, $pBuffer, 0, "wparam", "ptr")
    Else
    Local $tMemMap
    Local $pMemory = _MemInit($hWnd, $iBuffer, $tMemMap)
    If $fUnicode Then
    _SendMessage($hWnd, $SB_GETTEXTW, $iPart, $pMemory, 0, "wparam", "ptr")
    Else
    _SendMessage($hWnd, $SB_GETTEXT, $iPart, $pMemory, 0, "wparam", "ptr")
    EndIf
    _MemRead($tMemMap, $pMemory, $pBuffer, $iBuffer)
    _MemFree($tMemMap)
    EndIf
    Return DllStructGetData($tBuffer, "Text")
    EndFunc ;==>_GUICtrlStatusBar_GetText

    [/autoit]
  • @Raupi: Das ist wohl keine so gute Lösung. Damit wird doch nicht genug Speicher reserviert? So sollte es korrekt sein:

    [autoit]

    $iBuffer = DLLStructGetSize($tBuffer)

    [/autoit]
    • Offizieller Beitrag

    @Raupi: Das ist wohl keine so gute Lösung. Damit wird doch nicht genug Speicher reserviert? So sollte es korrekt sein:

    [autoit]

    $iBuffer = DLLStructGetSize($tBuffer)

    [/autoit]

    Da hast du mehr Ahnug als ich. Mir ist nur aufgefallen das beim auskommentieren der Zeile das Script nicht mehr abstürzt.

    autoBert, ja es funzt bei einem 32 Bit BS. Das Problem scheint nur beim compilieren als 32 Bit Exe unter einem 64 Bit BS zu bestehen. 8|

  • ja es funzt bei einem 32 Bit BS. Das Problem scheint nur beim compilieren als 32 Bit Exe unter einem 64 Bit BS zu bestehen. 8|


    Das Original führt bei mir sowohl in Scite als auch kompiliert zu einem Absturz (Problembericht an MS senden Bildschirm) beim Versuch es zu beenden,

    mfg (Auto)Bert

    • Offizieller Beitrag


    Das Original führt bei mir sowohl in Scite als auch kompiliert zu einem Absturz (Problembericht an MS senden Bildschirm) beim Versuch es zu beenden,

    mfg (Auto)Bert

    Hehe, wer lesen kann ist klar im Vorteil. 8| Irgendwie hab ich das absolut aus dem Zusammenhang gerissen und rumgedreht . :cursing: