#include <Clipboard.au3>
#include <Array.au3>
; для теста выделяем файлы и жмем Ctrl+1
HotKeySet('^{1}','test')
HotKeySet('{ESC}','_Exit')
Func test()
$aRet = StringSplit(_GetListFilesFromSelection(),@LF)
_ArrayDisplay($aRet)
EndFunc
While 1
Sleep(10)
WEnd
Func _Exit()
Exit
EndFunc
;возвращает строку со списком файлов, разделенных указанным сепаратором
Func _GetListFilesFromSelection($Delimiter=@LF)
Send('^{INSERT}') ; копириуем список выделенных файлов в буфер обмена
Sleep(500)
;=========================================================
Local $sFiles, $Return='', $tBuffer = DllStructCreate("char[256]")
_ClipBoard_Open(0)
Local $pData = _ClipBoard_GetDataEx($CF_HDROP)
If Not @error Then
$aRet = DllCall("shell32.dll", "int", "DragQueryFile", "ptr", $pData, "int", -1, "ptr", 0, "int", 0)
For $i = 0 To $aRet[0] - 1
DllCall("shell32.dll", "int", "DragQueryFile", "ptr", $pData, "int", $i, "ptr", DllStructGetPtr($tBuffer), "int", DllStructGetSize($tBuffer))
$sFiles = DllStructGetData($tBuffer, 1)
$Return&=$sFiles
If $i<> $aRet[0] - 1 Then $Return&=$Delimiter
Next
If $aRet[0]=0 Then $Return=-1
Else
$Return=-1
EndIf
$tBuffer = 0
_ClipBoard_Empty()
_ClipBoard_Close()
Return $Return
EndFunc ;==>_GetListFilesFromSelection