#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode",1) Global Const $WM_DROPFILES = 0x233 $hGUI=GUICreate("Test",400,300,-1,-1,-1,$WS_EX_ACCEPTFILES) GUISetOnEvent($GUI_EVENT_CLOSE,"Quit") GUISetState() ;~ Регистрируем событие Drag&Drop GUIRegisterMsg ($WM_DROPFILES, "DropFiles") While 1 Sleep(50) WEnd ;~ Выход из приложения Func Quit() Exit EndFunc ;~ Этот функция создаёт массив $gaDropFiles, из файлов полученный при перетаскивании ;~ Вызывается событием, прописанным в GUIRegisterMsg() Func DropFiles($hWnd, $msgID, $wParam, $lParam) Local $nSize, $pFileName,$gaDropFiles[1] Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255) For $i = 0 To $nAmt[0] - 1 $nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0) $nSize = $nSize[0] + 1 $pFileName = DllStructCreate("char[" & $nSize & "]") DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize) ReDim $gaDropFiles[$i+1] $gaDropFiles[$i] = DllStructGetData($pFileName, 1) $pFileName = 0 Next Call ("AddDropedFiles", $gaDropFiles) EndFunc Func AddDropedFiles($gaDropFiles) If IsArray($gaDropFiles) Then If StringRight( $gaDropFiles[0], 4 ) = ".lnk" Then $aLNK = FileGetShortcut($gaDropFiles[0]) $aPathLNK = StringRegExp($gaDropFiles[0], "(^.*)\\(.*)$", 3) $NAME = StringTrimRight($aPathLNK[1], 4) MsgBox(0,"Название ярыка: "&$NAME,"Shortcut target path: "&$aLNK[0]&@CR&"Working directory: "&$aLNK[1]&@Cr&"Arguments: "&$aLNK[2]&@CR&"Description: "&$aLNK[3]&@Cr&"Icon filename: "&$aLNK[4]&@CR&"Icon index: "&$aLNK[5]) EndIf EndIf EndFunc |