#include <WindowsConstants.au3>
Global $k = 0
Global Const $hUSER32 = DllOpen("user32.dll")
Global Const $hSHELL32 = DllOpen("shell32.dll")
$sDescription = 'Функция WM_DROPFILES выполняется при перетаскивании объектов на элементы окна' & @CRLF & _
'В отличии от нативного механизма функция не вставляет принудительно путь в элемент Edit'
$hGui = GUICreate('WM_DROPFILES', 600, 360, -1, -1, -1, $WS_EX_ACCEPTFILES)
$iEdit = GUICtrlCreateEdit($sDescription, 5, 5, 590, 300)
GUISetState()
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES")
Do
Until GUIGetMsg() = -3
Func WM_DROPFILES($hwnd, $msg, $wParam, $lParam)
$k += 1
WinSetTitle($hGui, '', 'Вызов ' & $k)
Local $aCursorInfo = GUIGetCursorInfo($hGui)
If Not @error And $aCursorInfo[4] = $iEdit Then
Local $aCall, $sDroppedFiles
$aCall = DllCall($hSHELL32, "dword", "DragQueryFileW", "handle", $wParam, "dword", -1, "wstr", "", "dword", 0)
If @error Or Not $aCall[0] Then Return SetError(1, 0, "")
For $i = 0 To $aCall[0] - 1
$aCall = DllCall($hSHELL32, "dword", "DragQueryFileW", "handle", $wParam, "dword", $i, "wstr", "", "dword", 32767)
If @error Or Not $aCall[0] Then
ExitLoop
Else
$sDroppedFiles &= $aCall[3] & @CRLF
EndIf
Next
DllCall($hSHELL32, "none", "DragFinish", "handle", $wParam)
GUICtrlSetData($iEdit, StringTrimRight($sDroppedFiles, 2))
Return 1
EndIf
Return 1
EndFunc