Type POINTAPI
x As Long y As Long End Type Type MSG hWnd As Long message As Long wParam As Long lParam As Long time As Long pt As POINTAPI End Type Public Declare Sub DragAcceptFiles Lib "shell32.dll" _ (ByVal hWnd As Long, ByVal fAccept As Long) Public Declare Sub DragFinish Lib "shell32.dll" _ (ByVal hDrop As Long) Public Declare Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" _ (ByVal hDrop As Long, ByVal UINT As Long, _ ByVal lpStr As String, ByVal ch As Long) As Long Public Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" _ (lpMsg As MSG, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, _ ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long Public Const PM_NOREMOVE = &H0 Public Const PM_NOYIELD = &H2 Public Const PM_REMOVE = &H1 Public Const WM_DROPFILES = &H233 Private Sub Main() 'In order for this to function properly you should place of of your program 'execution code in the Sub Main(), Make sure you change the project startup 'to sub Main Form1.Show 'This must be the last line! Nothing gets called after this WatchForFiles End Sub Public Sub WatchForFiles() 'This watches for all WM_DROPFILES messages Dim FileDropMessage As MSG 'Msg Type Dim fileDropped As Boolean 'True if Files where dropped Dim hDrop As Long 'Pointer to the dropped file structure Dim filename As String * 128 'the dropped filename Dim numOfDroppedFiles As Long 'the number of dropped files Dim curFile As Long 'the current file number 'loop to keep checking for files 'NOTE: Do any code you want to execute before this set Do 'check for Dropped file messages fileDropped = PeekMessage(FileDropMessage, 0, _ WM_DROPFILES, WM_DROPFILES, PM_REMOVE Or PM_NOYIELD) If fileDropped Then 'get the pointer to the dropped file structure hDrop = FileDropMessage.wParam 'get the total number of files numOfDroppedFiles = DragQueryFile(hDrop, True, filename, 127) For curFile = 1 To numOfDroppedFiles 'get the file name ret = DragQueryFile(hDrop, curFile - 1, filename, 127) 'at this pointer you can do what you want with the filename 'the filename will be a full qualified path Form1.lblNumDropped = LTrim$(Str$(numOfDroppedFiles)) Form1.List1.AddItem filename Next curFile 'we are now done with the structure, tell windows to discard it DragFinish (hDrop) End If 'be nice DoEvents Loop End Sub Private Sub Command1_Click() 'You can turn the form's / controls ability 'to accept the files by passing DragAcceptFiles 'the hWnd as the first parameter and True/False 'as the second parameter If Command1.Caption = "&Accept Files" Then 'allow the application to accept files DragAcceptFiles Form1.hWnd, True Command1.Caption = "&Do Not Accept" Else DragAcceptFiles Form1.hWnd, False Command1.Caption = "&Accept Files" End If End Sub Private Sub Command2_Click() 'Clears the contents of the list box List1.Clear End Sub Private Sub Command3_Click() 'end the program Unload Me End Sub |