Drag and Drop vom Explorer in 2 verschiedene Listen

  • Hallo,

    ich habe eine kleines Problem mit folgenden Skript:

    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    Global $WM_DROPFILES = 0x233
    ;Global $WM_DROPFILES2 = 0x004E

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

    Global $gaDropFiles[1], $str = ""

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

    ### Koda GUI section start ###
    $hGUI = GUICreate("Test", 400, 400, 219, 178, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_TOPMOST))
    $hList = GUICtrlCreateList("", 5, 5, 390, 190)
    GUICtrlSetState (-1, $GUI_DROPACCEPTED)
    $hList2 = GUICtrlCreateList("", 5, 205, 390, 190)
    GUICtrlSetState (-1, $GUI_DROPACCEPTED)

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

    GUISetState(@SW_SHOW)
    ### Koda GUI section end ###

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

    GUIRegisterMsg ($WM_DROPFILES, "WM_DROPFILES_UNICODE_FUNC")
    ;GUIRegisterMsg ($WM_DROPFILES2, "WM_DROPFILES_UNICODE_FUNC")
    ;GUIRegisterMsg(0x004E, "WM_DROPFILES_UNICODE_FUNC")
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_DROPPED
    $str = ""
    For $i = 0 To UBound($gaDropFiles) - 1
    $str = $gaDropFiles[$i]
    ;_GUICtrlListView_AddItem($hList, $str, 0)
    GUICtrlSetData($hList, $str)
    Next
    ; GUICtrlSetData($hList, $str)

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

    EndSwitch
    WEnd

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

    Func WM_DROPFILES_UNICODE_FUNC($hWnd, $msgID, $wParam, $lParam)

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

    Local $nSize, $pFileName
    Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFileW", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
    For $i = 0 To $nAmt[0] - 1
    $nSize = DllCall("shell32.dll", "int", "DragQueryFileW", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
    $nSize = $nSize[0] + 1
    $pFileName = DllStructCreate("wchar[" & $nSize & "]")
    DllCall("shell32.dll", "int", "DragQueryFileW", "hwnd", $wParam, "int", $i, "int", DllStructGetPtr($pFileName), "int", $nSize)
    ReDim $gaDropFiles[$i + 1]
    $gaDropFiles[$i] = DllStructGetData($pFileName, 1)
    $pFileName = 0
    Next
    EndFunc ;==>WM_DROPFILES_UNICODE_FUNC

    [/autoit]

    Wie kann ich abfragen, auf welche Liste ich eine Datei gezogen habe?

    Gruß
    kara2010

    Einmal editiert, zuletzt von kara2010 (11. Mai 2011 um 09:33)

    • Offizieller Beitrag

    Du musst nur @GUI_DropId benutzen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    Global $WM_DROPFILES = 0x233
    Global $gaDropFiles[1], $str = ""

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

    $hGUI = GUICreate("Test", 400, 400, 219, 178, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_TOPMOST))
    $hList = GUICtrlCreateList("", 5, 5, 390, 190)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    $hList2 = GUICtrlCreateList("", 5, 205, 390, 190)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)

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

    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_UNICODE_FUNC")
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_DROPPED
    $str = ""
    For $i = 0 To UBound($gaDropFiles) - 1
    $str = $gaDropFiles[$i]
    GUICtrlSetData(@GUI_DropId, $str)
    Next
    EndSwitch
    WEnd

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

    Func WM_DROPFILES_UNICODE_FUNC($hWnd, $msgID, $wParam, $lParam)
    Local $nSize, $pFileName
    Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFileW", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
    For $i = 0 To $nAmt[0] - 1
    $nSize = DllCall("shell32.dll", "int", "DragQueryFileW", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
    $nSize = $nSize[0] + 1
    $pFileName = DllStructCreate("wchar[" & $nSize & "]")
    DllCall("shell32.dll", "int", "DragQueryFileW", "hwnd", $wParam, "int", $i, "int", DllStructGetPtr($pFileName), "int", $nSize)
    ReDim $gaDropFiles[$i + 1]
    $gaDropFiles[$i] = DllStructGetData($pFileName, 1)
    $pFileName = 0
    Next
    EndFunc ;==>WM_DROPFILES_UNICODE_FUNC

    [/autoit]