bobbo Posted September 21, 2007 Share Posted September 21, 2007 I am having difficulty dragging multiple files from an explorer window into a list. I am using Opt("GUIOnEventMode", 1) I want to be able to make a list of PDF files. If I drag a file or files, it should add them to the list; if I drag a folder or folders, it should add the .pdf files within those folders. The problem is that when I drag multiple files, it only adds one of them. The weird thing is I have been able to get this to work using an opendialogue, just not via the drag method. Any help would be much appreciated! ;--------------------------Here is some of the code: #include <GUIConstants.au3> #include <GuiList.au3> ;-----------------here is the gui create ilne $AutoDivaForm = GUICreate("Bobbys DIVA Automatic Entry Script", 787, 500, 198, 134,-1,$WS_EX_ACCEPTFILES) ;--------------------here is the create list line global $SourceList=GUICtrlCreateList("", 0, 25,350,200,bitor($WS_HSCROLL,$ws_border,$ws_vscroll)) guictrlsetstate($SourceList,$GUI_DROPACCEPTED) _GUICtrlListSetHorizontalExtent($sourcelist,1000) GuiCtrlSetData(-1, "", "") guisetonevent($GUI_EVENT_DROPPED,"drag") ;----------------------here is the drag function func drag() msgbox(0,"hi","you just dragged: "&@gui_dragfile) ;-----------this only shows a single file if stringregexp(stringright(@gui_dragfile,4),"\.(.{3})",0)==1 Then ;---------this determines if a file or folder ;I don't know what to put here to account for multiple files Else addsourcefolder(@gui_dragfile) EndIf EndFunc ;--------------------here is the addsourcefolder function func AddSourceFolder($source) dim $source dim $initialdir="c:\folder" local $temparray=_filelisttoarray($source,"*.pdf") _arraydelete($temparray,0) local $x=0 ;------------------------This loop just makes these full path names while $x<ubound($temparray) $temparray[$x]=$source&"\"&$temparray[$x] _guictrllistadditem($SourceList,$temparray[$x]) $x=$x+1 WEnd endfunc Link to comment Share on other sites More sharing options...
MrCreatoR Posted September 22, 2007 Share Posted September 22, 2007 Hi,First of all please ue AutoIt tags ([autоit]code[/autоit])...To get multiple files dropped, use this example...expandcollapse popup#include <GuiConstants.au3> Global $DropFilesArr[1] Global $FilesAllowedMask[4] = [3, ".txt", ".exe", "D"] GUICreate("Drop Multiple Files to LV Demo", 500, 400, -1, -1, -1, $WS_EX_ACCEPTFILES+$WS_EX_TOPMOST) GUIRegisterMsg(0x233, "WM_DROPFILES_FUNC") GUICtrlCreateLabel("Drag to the List View some file(s)", 60, 20) $ListView = GUICtrlCreateListView("Col1|Col2|Col3", 50, 50, 400, 300, -1, $WS_EX_CLIENTEDGE) GUICtrlSendMsg(-1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_HEADERDRAGDROP, $LVS_EX_HEADERDRAGDROP) GUICtrlSetState(-1, $GUI_DROPACCEPTED) GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg Case -3 Exit Case $GUI_EVENT_DROPPED $NotValidExtPath = "" $ValidExtCount = 0 For $i = 1 To UBound($DropFilesArr)-1 If _IsValidExt($DropFilesArr[$i]) Then $ValidExtCount += 1 GUICtrlCreateListViewItem($DropFilesArr[$i], $ListView) Else $NotValidExtPath &= $DropFilesArr[$i] & @LF EndIf Next If $ValidExtCount > 0 Then GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 0, -1) If $NotValidExtPath <> "" Then MsgBox(262144+48, "Attention", "You dropped file(s) with non valid extension/attribute:" _ & @LF & @LF & $NotValidExtPath) EndIf EndSwitch WEnd Func _IsValidExt($sPath) For $i = 1 To $FilesAllowedMask[0] If StringRight($sPath, 4) = $FilesAllowedMask[$i] And _ Not StringInStr(FileGetAttrib($sPath), $FilesAllowedMask[$i]) Then Return True Next Return False EndFunc Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam) Local $nSize, $pFileName 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 $DropFilesArr[$i + 2] $DropFilesArr[$i+1] = DllStructGetData($pFileName, 1) $pFileName = 0 Next $DropFilesArr[0] = UBound($DropFilesArr)-1 EndFuncoÝ÷ Ú«¨µëaÇ^µêæw¬öW¨ú%uêÿªê-xÚ)zØb²+!£¨¹È^rH¶¬Æ¢W^«¢+Ù%MÑÉ¥¹%¹MÑÈ¡¥±ÑÑÑÉ¥ ÀÌØí¥±¤°ÅÕ½ÐíÅÕ½Ðì¤Q¡¸íQ¡¥Ì¥Ì½±Èì¤ Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1 AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ================================================== AutoIt is simple, subtle, elegant. © AutoIt Team Link to comment Share on other sites More sharing options...
bobbo Posted September 26, 2007 Author Share Posted September 26, 2007 Thanks for the quick reply MsCreator! I would have replied sooner but spent the past few days in the hospital with some broken bones! I'm back in action although with only one hand working... My only question is can this work in on event mode? I haven't really used the while loop msg style yet. -Bobbo ps thanks for the folder tip! Hi, First of all please ue AutoIt tags ([autоit]code[/autоit])... To get multiple files dropped, use this example... expandcollapse popup#include <GuiConstants.au3> Global $DropFilesArr[1] Global $FilesAllowedMask[4] = [3, ".txt", ".exe", "D"] GUICreate("Drop Multiple Files to LV Demo", 500, 400, -1, -1, -1, $WS_EX_ACCEPTFILES+$WS_EX_TOPMOST) GUIRegisterMsg(0x233, "WM_DROPFILES_FUNC") GUICtrlCreateLabel("Drag to the List View some file(s)", 60, 20) $ListView = GUICtrlCreateListView("Col1|Col2|Col3", 50, 50, 400, 300, -1, $WS_EX_CLIENTEDGE) GUICtrlSendMsg(-1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_HEADERDRAGDROP, $LVS_EX_HEADERDRAGDROP) GUICtrlSetState(-1, $GUI_DROPACCEPTED) GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg Case -3 Exit Case $GUI_EVENT_DROPPED $NotValidExtPath = "" $ValidExtCount = 0 For $i = 1 To UBound($DropFilesArr)-1 If _IsValidExt($DropFilesArr[$i]) Then $ValidExtCount += 1 GUICtrlCreateListViewItem($DropFilesArr[$i], $ListView) Else $NotValidExtPath &= $DropFilesArr[$i] & @LF EndIf Next If $ValidExtCount > 0 Then GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 0, -1) If $NotValidExtPath <> "" Then MsgBox(262144+48, "Attention", "You dropped file(s) with non valid extension/attribute:" _ & @LF & @LF & $NotValidExtPath) EndIf EndSwitch WEnd Func _IsValidExt($sPath) For $i = 1 To $FilesAllowedMask[0] If StringRight($sPath, 4) = $FilesAllowedMask[$i] And _ Not StringInStr(FileGetAttrib($sPath), $FilesAllowedMask[$i]) Then Return True Next Return False EndFunc Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam) Local $nSize, $pFileName 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 $DropFilesArr[$i + 2] $DropFilesArr[$i+1] = DllStructGetData($pFileName, 1) $pFileName = 0 Next $DropFilesArr[0] = UBound($DropFilesArr)-1 EndFuncoÝ÷ Ú«¨µëaÇ^µêæw¬öW¨ú%uêÿªê-xÚ)zØb²+!£¨¹È^rH¶¬Æ¢W^«¢+Ù%MÑÉ¥¹%¹MÑÈ¡¥±ÑÑÑÉ¥ ÀÌØí¥±¤°ÅÕ½ÐíÅÕ½Ðì¤Q¡¸íQ¡¥Ì¥Ì½±Èì¤ Link to comment Share on other sites More sharing options...
MrCreatoR Posted September 26, 2007 Share Posted September 26, 2007 I would have replied sooner but spent the past few days in the hospital with some broken bones!I hope you recovery quickly. My only question is can this work in on event mode?Yes... expandcollapse popup#include <GuiConstants.au3> Opt("GuiOnEventMode", 1) Global $DropFilesArr[1] Global $FilesAllowedMask[4] = [3, ".txt", ".exe", "D"] GUICreate("Drop Multiple Files to LV Demo", 500, 400, -1, -1, -1, $WS_EX_ACCEPTFILES+$WS_EX_TOPMOST) GUISetOnEvent($GUI_EVENT_CLOSE, "MainEvents") GUISetOnEvent($GUI_EVENT_DROPPED, "MainEvents") GUIRegisterMsg(0x233, "WM_DROPFILES_FUNC") GUICtrlCreateLabel("Drag to the List View some file(s)", 60, 20) $ListView = GUICtrlCreateListView("Col1|Col2|Col3", 50, 50, 400, 300, -1, $WS_EX_CLIENTEDGE) GUICtrlSendMsg(-1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_HEADERDRAGDROP, $LVS_EX_HEADERDRAGDROP) GUICtrlSetState(-1, $GUI_DROPACCEPTED) GUISetState() While 1 Sleep(100) WEnd Func MainEvents() Switch @GUI_CtrlId Case $GUI_EVENT_CLOSE Exit Case $GUI_EVENT_DROPPED $NotValidExtPath = "" $ValidExtCount = 0 For $i = 1 To UBound($DropFilesArr)-1 If _IsValidExt($DropFilesArr[$i]) Then $ValidExtCount += 1 GUICtrlCreateListViewItem($DropFilesArr[$i], $ListView) Else $NotValidExtPath &= $DropFilesArr[$i] & @LF EndIf Next If $ValidExtCount > 0 Then GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 0, -1) If $NotValidExtPath <> "" Then MsgBox(262144+48, "Attention", "You dropped file(s) with non valid extension/attribute:" _ & @LF & @LF & $NotValidExtPath) EndIf EndSwitch EndFunc Func _IsValidExt($sPath) For $i = 1 To $FilesAllowedMask[0] If StringRight($sPath, 4) = $FilesAllowedMask[$i] And _ Not StringInStr(FileGetAttrib($sPath), $FilesAllowedMask[$i]) Then Return True Next Return False EndFunc Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam) Local $nSize, $pFileName 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 $DropFilesArr[$i + 2] $DropFilesArr[$i+1] = DllStructGetData($pFileName, 1) $pFileName = 0 Next $DropFilesArr[0] = UBound($DropFilesArr)-1 EndFunc Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1 AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ================================================== AutoIt is simple, subtle, elegant. © AutoIt Team Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now