WM_Notify per Funktion

  • Hi Leute,
    ich bekomme unmittelbar nach Ausführen und kurzem bewegen des Zeigers folgenden Fehler:

    Code
    ParentGUI : 0x0008023C
    ParentGUI : 0x000701EC
    ParentGUI : 0x000701EC
    ParentGUI : 0x000701EC
    ParentGUI : 0x000701EC
    ParentGUI : 0x000701EC
    C:\Program Files\AutoIt3\Include\RegisterNotify_UDF.au3 (199) : ==> The requested action with this object has failed.:
    If $oTemp.Exists($iCode) Then
    If $oTemp.Exists($iCode) ^ ERROR

    Zeile 199 ist der auslösende Faktor:

    [autoit]

    Func UDF_NOTIFY_HANDLER($hWnd, $Msg, $wParam, $lParam)
    If Not $oRegisteredGUI.Exists(String($hWnd)) Then Return 'GUI_RUNDEFMSG'; Wenn GUIHandle nicht registriert Func verlassen
    Local $hWndFrom, $iCode, $tNMHDR, $oTemp
    $tNMHDR = DllStructCreate($UDF_tagNMHDR, $lParam)
    $hWndFrom = String(DllStructGetData($tNMHDR, "hWndFrom"))
    If Not $oRegisteredControl.Exists($hWndFrom) Then Return 'GUI_RUNDEFMSG'; Wenn ControlHandle nicht registriert Func verlassen
    $iCode = DllStructGetData($tNMHDR, "Code")
    $oTemp = $aNotify[$oRegisteredControl.Item($hWndFrom)][1]
    If Not IsObj($oTemp) Then ConsoleWrite("Object existriert nicht 2" & @CRLF)
    If $oTemp.Exists("Func") Then
    Call($oTemp.Item("Func"), $hWndFrom, DllStructGetData($tNMHDR, "IDFrom"), $iCode, $wParam, $lParam)
    If @error = 0xDEAD And @extended = 0xBEEF Then ConsoleWrite("Function does not exist or invalid number of parameters" & @CRLF)
    Return 'GUI_RUNDEFMSG'
    ;~ Else
    ;~ If $oTemp.Exists($iCode) Then
    ;~ Call($oTemp.Item($iCode), $hWndFrom, DllStructGetData($tNMHDR, "IDFrom"), $iCode, $wParam, $lParam)
    ;~ If @error = 0xDEAD And @extended = 0xBEEF Then ConsoleWrite("Function does not exist or invalid number of parameters" & @CRLF)
    ;~ Return 'GUI_RUNDEFMSG'
    ;~ Else
    ;~ Return 'GUI_RUNDEFMSG'
    ;~ EndIf
    EndIf
    Return 'GUI_RUNDEFMSG'
    EndFunc ;==>UDF_NOTIFY_HANDLER

    [/autoit]

    Also "If $oTemp.Exists($iCode) Then". Hat jemand dazu eine Idee?

    Danke!

    • Offizieller Beitrag

    Das ist ein AutoIt Bug, in der Version 3.3.8.1 .
    Mal sehen ob ich in der nächsten Zeit Lust habe, dann bau ich die UDF um, damit sie wieder läuft.
    Bin mir nicht mal sicher, ob ich durch meinen Code noch durchsteige, lange ist es her und ich hab die UDF selbst noch nie benutzt :whistling:


    Edit: Keine Ahnung warum, aber ab 3.3.8.0 wird bei der Struct Mist gebaut.
    Bei der UDF müssen 2 Zeilen geändert werden.

    Zeile 5:

    [autoit]

    Global Const $UDF_tagNMHDR = "struct; hwnd hWndFrom;uint_ptr IDFrom;INT Code; endstruct"

    [/autoit]


    Zeile 191:

    [autoit]

    $iCode = Int(DllStructGetData($tNMHDR, "Code"))

    [/autoit]

    Aktualisierte Version im Startpost.

    Edit 2: Die UDF läuft jetzt auch bei Scripten die als X64 compiliert werden ;)