Problem mit WM_DRAWCLIPBOARD

  • Guten Abend,

    Ich habe momentan diesen Codeschnippsel:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <ClipBoard.au3>
    #include <SendMessage.au3>
    #include <Array.au3>
    #Include <Constants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListBox.au3>

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

    Opt('TrayMenuMode', 1)
    Opt('TrayOnEventMode', 1)
    Opt('GUICloseOnESC', 0)

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

    Global $hNext=0,$List_Inhalt[11]

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

    $Fenster = GUICreate("Clipboard Manager",235,200)
    $List_Clipbrd = GUICtrlCreateList("",10,10,215,140,BitOr($WS_BORDER, $WS_VSCROLL))
    $Button_clear = GUICtrlCreateButton("Clear",10,160,50,30)
    $Button_Ersetzen = GUICtrlCreateButton("Replace",65,160,50,30)
    $Button_Save = GUICtrlCreateButton("Save",120,160,50,30)
    $Button_Load = GUICtrlCreateButton("Load",175,160,50,30)
    GUISetState(@SW_SHOW,$Fenster)

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

    $hNext = _ClipBoard_SetViewer($fenster)

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

    GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD")

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

    While 1
    Sleep(10)
    $mMsg = GUIGetMsg()
    Switch $mMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _ContentsToArray ()
    Local $Count
    $Count = _GUICtrlListBox_GetCount($List_Clipbrd)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Count = ' & $Count & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    _ArrayDisplay($List_Inhalt)
    $List_Inhalt[0]=$Count
    If $List_Inhalt[0] > 0 Then
    For $Index=1 To $List_Inhalt[0]
    $List_Inhalt[$Index]=_GUICtrlListBox_GetText($List_Clipbrd,$Index-1)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $List_Inhalt[$Index] = ' & $List_Inhalt[$Index] & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Next
    EndIf
    _ArrayDisplay($List_Inhalt)
    Return $List_Inhalt ;$List_Inhalt[0] = Anzahl Elemente
    EndFunc ;==>_ContentsToArray

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

    ; Bearbeitete $WM_DRAWCLIPBOARD-Nachrichten
    Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
    _ContentsToArray ()
    If $hNext <> 0 Then _SendMessage($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
    EndFunc ;==>WM_DRAWCLIPBOARD

    [/autoit]

    Gewollte Funktion: Sobald sich was im Zwischenspeicher änder soll die Funktion _ContentsToArray aufgerufen werden und mir die bereits vorhandenen Einträge in der Listbox als Arrayanzeigen (_ArrayDisplay)

    Fehler: Sobald sich was im Zwischenspeicher ändert wird die Funktion aufgerufen, aber _ArrayDisplay hängt sich jedes mal auf... Ich habe keine Idee wieso :(
    Vielleicht sieht jemand etwas, was ich die ganze Zeit übersehe.

    Danke im Voraus

    MfG
    Fabian

    Einmal editiert, zuletzt von Fabian (3. Juni 2010 um 20:38)

  • Okay :)

    Dann hab ich aber gleich noch eine andere Frage:

    Spoiler anzeigen
    [autoit]

    Func _ContentsToArray ()
    Local $Count,$List_Inhalt[1]
    $Count = _GUICtrlListBox_GetCount($List_Clipbrd)
    Redim $List_Inhalt[$Count]
    If $List_Inhalt[0] > 0 Then
    For $Index=1 To $List_Inhalt[0]
    $List_Inhalt[$Index]=_GUICtrlListBox_GetText($List_Clipbrd,$Index-1)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $List_Inhalt[$Index] = ' & $List_Inhalt[$Index] & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Next
    EndIf
    _ArrayDisplay($List_Inhalt)
    Return $List_Inhalt ;$List_Inhalt[0] = Anzahl Elemente
    EndFunc ;==>_ContentsToArray

    [/autoit]

    Wie kriege ich hin, dass das Array so gross wird wie die Anzahl Einträge?

    MfG
    Fabian

  • Sollte eigentlich ein kleiner Clipboard Manager werden, da ich öfters die Sachen im Zwischenspeicher mit anderen Sachen überschreibe :)


    Mit _ArrayAdd find ich das viel zu aufwendig, weil ReDim eigentlich wirklich genau das ist was ich brauche, aber nicht funktioniert :(

    Spoiler anzeigen

    ReDim
    --------------------------------------------------------------------------------

    Verändert die Größe eines bestehenden Arrays.


    ReDim $array[subscript 1]...[subscript n]


    Parameter

    $array Der Name des anzupassenden Arrays.
    subscript Die Anzahl der Elemente, die in den einzelnen Arraydimensionen erstellt werden sollen; nummeriert von 0 bis n-1.


    Bemerkungen

    Das Schlüsselwort ReDim ist ähnlich zu Dim, außer dass ReDim die Werte im Array nicht löscht, wenn die Arraygröße verändert wird. Die Anzahl der Dimensionen des Arrays muss dazu allerdings gleich bleiben. Das Array erhält den Gültigkeitsbereich (Global oder Lokal), den es vor der Größenanpassung hatte.