VB程序实现文件拖放功能

1.新建一个模块,写入以下代码:

Option Explicit

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'将消息传答窗口函数

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'在窗口结构中为指定的窗口设置信息

Private IPrevWndProc As Long

Private hHookWindow As Long

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 Const GWL_WNDPROC = (-4)

Public Const WM_DROPFILES = &H233

Public Sub SetHook(IHwnd As Long) '设置消息接法挂钩
If hHookWindow <> 0 Then Call ClearHook '如果已经挂钩则删除当前子类挂钩
hHookWindow = IHwnd '保存拖动文件的句柄
IPrevWndProc = SetWindowLong(hHookWindow, GWL_WNDPROC, AddressOf HookCallBack) '设置与该文件挂钩
'第三个参数告诉系统程序处理消息是用哪个函数
End Sub

Public Sub ClearHook() '删除子类消息挂钩
Dim IReturn As Long
'检查保证此程序有一个当前挂钩
If hHookWindow = 0 Then Exit Sub
If IsEmpty(hHookWindow) Then Exit Sub
If IsNull(hHookWindow) Then Exit Sub
IReturn = SetWindowLong(hHookWindow, GWL_WNDPROC, IPrevWndProc) '删除挂钩
End Sub

Function HookCallBack(ByVal hWnd As Long, ByVal IMsg As Long, ByVal wParam As Long, ByVal IParam As Long) _
As Long
Select Case hWnd
Case hHookWindow '如果消息是发给应用程序主窗体
MainFrm.MessageProc IMsg, wParam, IParam
'注意此处MainFrm为窗体名称,MessageProc为该窗体自身的消息处理函数
Case Else
End Select
HookCallBack = CallWindowProc(IPrevWndProc, hWnd, IMsg, wParam, IParam)
'将消息传递给消息处理栈中的下一个进程
End Function

2.在窗体上添加一个ListBox控件,命名为lstFiles,接着拖入2个按钮,命名为cmdAction,最后写入如下代码:

Option Explicit

Private Sub cmdAction_Click(Index As Integer)
Select Case Index
Case 0
lstFiles.Clear
Case 1
End
End Select
End Sub

Private Sub Form_Load()
Call SetHook(Me.hWnd)
Call DragAcceptFiles(Me.hWnd, True)
End Sub

Private Sub Form_Terminate()
Call ClearHook
End Sub

Public Sub MessageProc(IMsg As Long, wParam As Long, IParam As Long)
Dim nDropCount As Integer
Dim nLoopCtr As Integer
Dim IReturn As Long
Dim hDrop As Long
Dim sFileName As String
Select Case IMsg
Case WM_DROPFILES
hDrop = wParam '保存拖放文件的句柄
sFileName = Space$(255)
nDropCount = DragQueryFile(hDrop, -1, sFileName, 254) 'DragQueryFile 判定多少文件已拖放在窗体中
For nLoopCtr = 0 To nDropCount - 1
sFileName = Space$(255)
IReturn = DragQueryFile(hDrop, nLoopCtr, sFileName, 254)
lstFiles.AddItem Left$(sFileName, IReturn)
Next
Call DragFinish(hDrop) '释放内部拖放文件事件的句柄
End Select
End Sub

最后允许程序,就可以看到把其他程序拖入本程序,程序就能获得其绝对路径了.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值