哪位大哥能帮我把这些附加功能添加到这段代码里,多谢多谢

lq1521 2010-06-18 01:34:33
#支持鼠标右键功能,建立鼠标右键“发送到文件粉碎机”快捷方式;
#通过windows资源管理器选定要删除的文件夹时,支持右键“发送到”功能,即此时文件粉碎机自动打开,粉碎选定的文件或文件夹;
#支持拖拽功能。当文件拖拽到文件粉碎机“切碎”工作窗口时,自动粉碎选定文件。


' 此函数返回值是指向项目(ITEM)的一个指针,有了这个数值,再用API函数SHGetPathFromIDList可以获得具体的路径,如果用户按的是“取消”按钮,则返回值为NULL。
Private Declare Function SHBrowseForFolder _
Lib "shell32.dll" Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDList _
Lib "shell32.dll" _
(ByVal pidl As Long, _
pszPath As String) As Long
Private Type BROWSEINFO
hOwner As Long ' 当前窗口的句柄。
pidlRoot As Long ' 从何根路径开始展开文件夹,缺省情况下从“桌面”开始展开。
pszDisplayName As String
lpszTitle As String ' 目录树上方的标题,用来给用户一些提示信息。
ulFlage As Long ' 显示标志控制项:比如若赋值为BIF_BROWSEFORCOMPUTER,则只有当用户选择“我的电脑”时“确定”按钮才有效,这里我们需要的是 BIF_RETURNONLYFSDIRS,只有用户选择的是文件夹时“确定”按钮才有效。
lpfn As Long
lparam As Long
iImage As Long
End Type

Private Function ShowDir(MehWnd As Long, _
dirpath As String, _
Optional Title As String = "请选择文件夹:", _
Optional flage As Long = &H1, _
Optional DirID As Long) As String
Dim BI As BROWSEINFO
Dim TempID As Long
Dim TempStr As String
TempStr = String$(255, Chr$(0))
With BI
.hOwner = MehWnd '句柄
.pidlRoot = 0 '展开根目录
.lpszTitle = Title + Chr$(0) '列表框标题
.ulFlage = flage
End With
TempID = SHBrowseForFolder(BI) '调用API函数显示列表框
DirID = TempID
If SHGetPathFromIDList(ByVal TempID, ByVal TempStr) Then
dirpath = Left$(TempStr, InStr(TempStr, Chr$(0)) - 1)
ShowDir = dirpath
Else
ShowDir = ""
End If
End Function

Sub Findfile(getPath As String) '遍历目录里的所有文件
Dim mypath As String
Dim myname As String
Dim mydirectory() As String
Dim i, intresult As Integer
mypath = getPath
If mypath = "" Then Exit Sub '如果文件夹为空则无需遍历
intresult = 2
ReDim mydirectory(intresult) '初始化动态数组
mydirectory(1) = mypath
i = 1
Do Until mydirectory(i) = "" '以广度优先算法遍历目录
mypath = mydirectory(i)
If Right(mypath, 1) <> "\" Then mypath = mypath & "\"
myname = Dir(mypath, vbDirectory) ' 找寻第一项。
Do While myname <> "" ' 开始循环。
If myname <> "." And myname <> ".." Then ' 跳过当前的目录及上层目录。
If (GetAttr(mypath & myname) And vbDirectory) = vbDirectory Then ' 使用位比较来确定 MyName 代表一目录。
mydirectory(intresult) = mypath & myname ' 如果它是一个目录,将其名称存储在一个数组里。
intresult = intresult + 1
ReDim Preserve mydirectory(intresult) '重定义动态数组大小,并保存以前数据
Else
List1.AddItem mypath & myname '如果是文件则加入到列表框
End If
End If
myname = Dir ' 查找下一个目录。
Loop
i = i + 1
Loop
End Sub

Private Sub Command1_Click() '添加文件
Dim i As Integer, z As Integer
Dim path As String
cdlg.Flags = cdlOFNAllowMultiselect + cdlOFNExplorer '设置通用对话框可以多选
cdlg.FileName = ""
cdlg.Filter = "All Files|*.*" '设置公共对话框的文件过滤器
cdlg.ShowOpen '显示“打开”对话框
If cdlg.FileName = "" Then Exit Sub '如果一个文件也没选则退出过程
cdlg.FileName = cdlg.FileName & Chr(0)
z = 1
i = InStr(z, cdlg.FileName, Chr(0))
'选择一个文件则直接加入列表框中,如果选择多个文件则分离出每个文件分别加入列表框。
If i = Len(cdlg.FileName) Then
List1.AddItem RTrim(cdlg.FileName)
Else
path = Mid(cdlg.FileName, z, i - 1)
z = i + 1
If Right(path, 1) <> "\" Then path = path + "\"
For i = z To Len(cdlg.FileName)
i = InStr(z, cdlg.FileName, Chr(0))
List1.AddItem path + Mid(cdlg.FileName, z, i - 1)
z = i + 1
Next
End If
Command3.Enabled = True
End Sub

Private Sub Command2_Click() '添加目录
Dim mypath As String
mypath = ShowDir(Me.hWnd, App.path) '调用函数选择目录
Findfile mypath '调用函数遍历目录
Command3.Enabled = True
End Sub

Private Sub Command3_Click() '开始粉碎
If List1.ListCount = 0 Then Exit Sub '如果列表框空则不用执行
Dim i As Integer, j As Integer
Dim filenumber As Integer
Dim filesize As Long
i = MsgBox("执行粉碎后将无法恢复,继续吗?", 33, "文件粉碎")
If i = 2 Then Exit Sub
For i = 0 To List1.ListCount - 1
SetAttr List1.List(i), vbNormal '将所有文件属性设置为普通文件,因为只读文件是无法写入的
Next i
For i = 0 To List1.ListCount - 1
filenumber = FreeFile '获取可用文件号
Open List1.List(i) For Binary As #filenumber '以Binary方式打开文件
filesize = LOF(filenumber)
If filesize = 0 Then GoTo continue
'设置进度条的最大和最小值
jdt.Max = filesize
jdt.Min = 0
If filesize <= 1000000 Then
Put #filenumber, , String$(filesize, Chr$(0)) '小于1M的文件按实际大小一次性填充
jdt.Value = filesize
Else
'大于1M的文件一次填充1M,剩余的按实际大小填充
For j = 1 To filesize \ 1000000
Put #filenumber, , String(1000000, Chr$(0))
jdt.Value = jdt.Value + 1000000
Next j
Put #filenumber, , String(filesize Mod 1000000, Chr$(0))
jdt.Value = filesize
End If
jdt.Value = 0
continue: Close filenumber
Kill List1.List(i) '粉碎结束一个文件后将其删除
Next i
MsgBox "完成文件粉碎!"
List1.Clear
Command3.Enabled = False
End Sub

Private Sub Command4_Click() '清空列表
List1.Clear
End Sub

Private Sub Command5_Click() '退出系统
End
End Sub

Private Sub Form_Load()
Command3.Enabled = False
End Sub

Private Sub List1_DblClick()
List1.RemoveItem List1.ListIndex
End Sub


请给出改编之后的代码,或提出可行方案,谢谢
...全文
94 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lq1521 2010-06-20
  • 打赏
  • 举报
回复
好吧[Quote=引用 8 楼 a1875566250 的回复:]
Command函数+SendTo文件夹
OLEDrop属性你可以去看看书,有介绍的。
[/Quote]
lq1521 2010-06-20
  • 打赏
  • 举报
回复
谢谢。。。[Quote=引用 9 楼 chinaboyzyq 的回复:]
楼主的头像一流。
[/Quote]
chinaboyzyq 2010-06-20
  • 打赏
  • 举报
回复
楼主的头像一流。
a1875566250 2010-06-19
  • 打赏
  • 举报
回复
Command函数+SendTo文件夹
OLEDrop属性你可以去看看书,有介绍的。
lq1521 2010-06-19
  • 打赏
  • 举报
回复
大师,我也是迫不得已啊,我们老师赶鸭子上架了。
你给我说的方法我看着挺可行的,只是不知道该具体怎么实现,在代码哪个地方再进行编写?并且插入什么样的代码,最好能有截图,多谢大师了。[Quote=引用 3 楼 caozhy 的回复:]
(1)把你的程序的快捷方式放入SentTo文件夹。
在你的程序里面用Command接收传入的文件名
(2)同(1)
(3)设置OLEDrag属性,并且接受Drop方法。

p.s. 初学者写这么复杂的程序比较困难,可以找一个现成的软件来用。
[/Quote]
lq1521 2010-06-19
  • 打赏
  • 举报
回复
大师,那我先看看书吧,实在不懂再问问你,希望你能给我指点指点,先谢谢了[Quote=引用 5 楼 caozhy 的回复:]
引用 4 楼 lq1521 的回复:
大师,我也是迫不得已啊,我们老师赶鸭子上架了。
你给我说的方法我看着挺可行的,只是不知道该具体怎么实现,在代码哪个地方再进行编写?并且插入什么样的代码,最好能有截图,多谢大师了。

引用 3 楼 caozhy 的回复:
(1)把你的程序的快捷方式放入SentTo文件夹。
在你的程序里面用Command接收传入的文件名
(2)同(1)
(3)设置……
[/Quote]
贝隆 2010-06-19
  • 打赏
  • 举报
回复
只能upupupupupupupupupupupupupupupupupup
threenewbee 2010-06-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lq1521 的回复:]
大师,我也是迫不得已啊,我们老师赶鸭子上架了。
你给我说的方法我看着挺可行的,只是不知道该具体怎么实现,在代码哪个地方再进行编写?并且插入什么样的代码,最好能有截图,多谢大师了。

引用 3 楼 caozhy 的回复:
(1)把你的程序的快捷方式放入SentTo文件夹。
在你的程序里面用Command接收传入的文件名
(2)同(1)
(3)设置OLEDrag属性,并且接受Drop方法……
[/Quote]
你可以去图书馆找一本VB的书来看。我在这里说的多了,你没耐心看,写的少了你还是看不懂。图文并茂,具体实现,这个书的排版制作比论坛发贴要好很多。
threenewbee 2010-06-18
  • 打赏
  • 举报
回复
(1)把你的程序的快捷方式放入SentTo文件夹。
在你的程序里面用Command接收传入的文件名
(2)同(1)
(3)设置OLEDrag属性,并且接受Drop方法。

p.s. 初学者写这么复杂的程序比较困难,可以找一个现成的软件来用。
lq1521 2010-06-18
  • 打赏
  • 举报
回复
大哥说的详细点呗,我vb都不怎么懂啊,能不能来点具体步骤[Quote=引用 1 楼 lyserver 的回复:]
一、动态增加一个SHELL菜单项。
二、菜单项的功能为执行文件粉碎程序。
三、技术资料参考http://www.mvps.org/emorcillo/download/vb6/shlext.msi
[/Quote]
lyserver 2010-06-18
  • 打赏
  • 举报
回复
一、动态增加一个SHELL菜单项。
二、菜单项的功能为执行文件粉碎程序。
三、技术资料参考http://www.mvps.org/emorcillo/download/vb6/shlext.msi

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧