UDF > WinAPIEx > System > Windows >


_WinAPI_DragQueryFileEx

Obtient les noms des fichiers déposés qui résultent d'une opération glisser-déposer qui a réussi

#include <WinAPISysWin.au3>
_WinAPI_DragQueryFileEx ( $hDrop [, $iFlag = 0] )

Paramètres

$hDrop Handle de la structure glisser-déposer qui décrit le fichier déposés. Ce paramètre est passé au message WM_DROPFILES avec le paramètre WPARAM.
$iFlag [optionnel] Le flag qui spécifie s'il faut retourner les fichiers ou les dossiers ou les deux, les valeurs valides sont:
0 - Retourner les fichiers et dossiers ensemble (par défaut).
1 - Retourner les fichiers seulement.
2 - Retourner les dossiers seulement.

Valeur de retour

Succès: Retourne le tableau des noms de fichiers déposés. L'élément d'index zéro du tableau indique le nombre de noms de fichiers.
Si aucun fichier satisfait la condition ($iFlag), la fonction échoue.
Échec: Définit @error <> 0.

Voir aussi

Consultez DragQueryFile dans la librairie MSDN.

Exemple

#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>

OnAutoItExitRegister('OnAutoItExit')

; Crée une GUI
Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 400, 400)
Local $idCheck = GUICtrlCreatÉcheckbox('Enable Drag && Drop', 10, 370, 120, 19)
Local $idLabel = GUICtrlCreateLabel('', 100, 100, 200, 200)
Global $g_hLabel = GUICtrlGetHandle($idLabel)
GUICtrlSetBkColor(-1, 0xD3D8EF)
GUICtrlCreateLabel('Drop here', 175, 193, 50, 14)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

; Autorise WM_DROPFILES à être reçu par les processus privilégiés inférieures (Windows Vista ou une version ultérieure)
#cs
If IsAdmin() Then
    _WinAPI_ChangeWindowMessageFilterEx($g_hLabel, $WM_COPYGLOBALDATA, $MSGFLT_ALLOW)
    _WinAPI_ChangeWindowMessageFilterEx($g_hLabel, $WM_DROPFILES, $MSGFLT_ALLOW)
EndIf
#ce

; Inscrit la procédure fenêtre
Global $g_hDll = DllCallbackRegister('_WinProc', 'ptr', 'hwnd; uint; wparam; lparam ')
Global $g_pDll = DllCallbackGetPtr($g_hDll)
Global $g_hProc = _WinAPI_SetWindowLong($g_hLabel, $GWL_WNDPROC, $g_pDll)

GUISetState(@SW_SHOW)

Global $iMsg
Do
    $iMsg = GUIGetMsg()
    If $iMsg = $idCheck Then
        _WinAPI_DragAcceptFiles($g_hLabel, GUICtrlRead($idCheck) = $GUI_CHECKED)
    EndIf
Until $iMsg = $GUI_EVENT_CLOSE

Func _WinProc($hWnd, $iMsg, $wParam, $lParam)
    Switch $iMsg
        Case $WM_DROPFILES
            Local $sFileList = _WinAPI_DragQueryFileEx($wParam)
            If Not @error Then
                ConsoleWrite('--------------------------------------------------'& @CRLF)
                For $i = 1 To $sFileList[0]
                    ConsoleWrite($sFileList[$i] & @CRLF)
                Next
            EndIf
            _WinAPI_DragFinish($wParam)
            Return 0
    EndSwitch
    Return _WinAPI_CallWindowProc($g_hProc, $hWnd, $iMsg, $wParam, $lParam)
EndFunc   ;==>_WinProc

Func OnAutoItExit()
    _WinAPI_SetWindowLong($g_hLabel, $GWL_WNDPROC, $g_hProc)
    DllCallbackFree($g_hDll)
EndFunc   ;==>OnAutoItExit