When you select multiple items, the item you actually click on is the first one in the array, which is why I made it show the array. Also, note that the list box is made to not sort the items. Hopefully, this will help:
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
Global $__aGUIDropFiles = 0
$Form1 = GUICreate("Form1", 600, 229, -1, -1, -1, $WS_EX_ACCEPTFILES)
$List1 = GUICtrlCreateList("", 16, 24, 545, 175, $WS_BORDER) ; Unsorted list!!!!
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES')
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_DROPPED
_ArrayDisplay($__aGUIDropFiles)
$sList = _ArrayToString($__aGUIDropFiles, "|", 1) ; The 1 is to start at array[1] (second item), since the array's first item array[0] is the item count
GUICtrlSetData($List1, "") ; Clears the list
GUICtrlSetData($List1, $sList) ; Sets new data
EndSwitch
WEnd
Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $lParam
Switch $iMsg
Case $WM_DROPFILES
Local Const $aReturn = _WinAPI_DragQueryFileEx($wParam)
If UBound($aReturn) Then
$__aGUIDropFiles = $aReturn
Else
Local Const $aError[1] = [0]
$__aGUIDropFiles = $aError
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_DROPFILES