移动文件到回收站 声明: Public Type SHFILEOPSTRUCT hwnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Long hNameMappings As Long lpszProgressTitle As Long End TypePublic Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As LongPublic Const FO_DELETE = &H3 Public Const FOF_ALLOWUNDO = &H40 代码: Dim SHop As SHFILEOPSTRUCT Dim strFile as stringWith SHop .wFunc = FO_DELETE .pFrom = strFile + Chr(0) .fFlags = FOF_ALLOWUNDO End WithSHFileOperation SHop
在VB程序中通过回收站删除文件 作者:土人 在标准工程中添加一个公共对话框和两个按钮即可尝试本例:Option Explicit'删除文件的API Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As ToBin) As Long '清空回收站的API Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (ByVal hwnd As Long, ByVal pszRootPath As String, ByVal dwFlags As Long) As LongPrivate Type ToBin hwnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Long hNameMappings As Long lpszProgressTitle As Long End TypeConst FO_DELETE = &H3 Const FOF_ALLOWUNDO = &H40 Const SHERB_NORMAL = &H0'将文件移至回收站 Private Sub Command1_Click() Dim Go As ToBin Dim strFile As String With CommonDialog1 .Filter = "(*.bak)|*.bak" .DialogTitle = "删除文件" .ShowOpen strFile = .FileName End WithWith Go .wFunc = FO_DELETE .pFrom = strFile .fFlags = FOF_ALLOWUNDO End WithSHFileOperation Go End Sub'清空回收站 Private Sub Command2_Click() Dim RetVal As Long RetVal = SHEmptyRecycleBin(0&, vbNullString, SHERB_NORMAL) End Sub
用Visual Basic编程建立自己的回收站-------------------------------------------------------------------------------- http://tech.sina.com.cn 2000/09/29 软件世界 王福生 杨洪勇 在Windows 95中删除一个文件或文件夹,只需用鼠标拖动文件(夹)到回收站,然后松开鼠标按钮即可,这种可视化的操作给用户带来了很大方便。如果程序开发人员在自己的程序中能做到这样,在自己的程序中也增加一个和Windows中风格相同的回收站,那么开发出的程序一定会受到用户的欢迎。怎么才能完成这种操作呢?本文介绍一种使用Visual Basic编程来完成这个动作的方法。 在Microsoft Windows资料中将按下鼠标按钮移动对象称为拖,将鼠标按钮的松开称为放。在Visual Basic中,如果项目中使用多个窗体,可以把一个图标从一个窗体拖放到另一个窗体。控件允许两种拖动,这取决于DragMode特性的两个不同的值。缺省情况是DragMode特性的值为0,除特定情况外不允许拖动控件;将这个特性的值改成1(Automatic)意味着用户可以拖动控件。 下面介绍拖动鼠标删除文件方法的实现过程。在Visual Basic的项目中允许用户拖动代表文件的图标至处理单元,此单元相当于Windows 95中的回收站,在给出警告之后把文件从磁盘中删除。 第一步,首先启动一个有两个窗体的项目,在启动窗体的下角加一个图片框(或图像控件),将这个控件的Picture特性设置成TRASH03.ICO文件中的图标,该文件位于Icon库的Computer子目录中。如果使用图片框,将AutoSize特性设置成True(如果选择一个图像控件,将Stretch特性设置成False)。 第二步,建立两个控件数组,一个是控件名为FileName的标签数组,另一个名字为Files的图像控件数组。将图像控件的DragMode特性设置成1(Automatic);将Visble特性设置成False,使标签和图像控件在运行时都不可见。通常,这些控件数组中的所有后续元素都继承这些特性。 这个项目中的大多数工作都体现在下面的DragDrop事件过程中: Private Sub Garbage_DragDrop(Source As Control,X As Single,Y As Single) ‘local variables Dim Msg As String Dim ControlIndex As Integer,YesNo As Integer ControlIndex=Source.Index Forml.FileName(ControlIndex).Visble=False Msg= "Do you really want to delete"+ Forml.FileName(ControlIndex).Caption YesNo=MsgBox(Msg,vbYesNo, "Confirmation Box") If YesNo=vbYes Then Kill(Forml.FileName(ControlIndex).Caption) Unload Files(ControlIndex) Unload Forml.FileName(ControlIndex) Else Forml.FileName(ControlIndex).Visible=True Forml.File(ControlIndex).Visible=True End If End Sub 该事件过程中的ControlIndex这一行代码找出被拖动控件的索引;接下来的两行代码使图片框和标签在放置操作后暂时不可见。ControlIndex变量让Visual Basic从标签数组中提取标题(也就是文件名)。消息框的类型为=vbYesNo,因此是个Yes/No消息框,标题是Confirmation Box。Kill命令从磁盘中删除文件。一旦程序删除了文件,就从控件数组中卸除标签和图片框。如果用户操作有误,确认的消息框返回No,则程序代码使得原来的图片框和标签再次显现。 下一步,建立一个称为Directons的通用过程,在一个窗体上显示出给用户提供的这个应用程序所需的信息,该窗体用作一个定制对话框。 Sub Directons () Forml.Hide Form2.Show Form2.Cls Form1.Print "This program illustrates dragging and dropping mouse operations." Form2.Print "The user gives a file spec inside the message box and a form" Form2.Print "appears with icons labelled by all the files with that file specifcation." Form2.Print "The user can drag the icon to be 'flushed' away i. e. deleted." End Sub 对话框上OK按钮的Click过程是: Private Sub btnOK-Click () Me.Hide Form1.Show End Sub 启动窗体的Form-Load 过程需要装入Directons窗体并调用显示信息的通用过程。它可以这样的: Private Sub Form-Load () Load Form2 Directons End Sub 启动窗体上的File 菜单有以下两项: New File Spec Exit 单击New File Spec菜单项让用户查看新的目录或驱动器。这个菜单项会调用一个通用过程GetFile,从磁盘读入文件名。 最后,是如何处理新的文件说明。用户第一次使用这个应用程序时,Visual Basic装入两个控件数组中一定数目的元素。程序需要改变标题中所含的信息,这些标题含有要删除的文件的名字。这两个控件数组只装入一次,然后使用Dir $命令建立一个字符串,从磁盘读入住处后将这个数组中的值赋给标签的Caption特性。该程序代码要读磁盘信息两次来恰当地重新确定数组尺寸。至于菜单项,因为“N”加了下划线,用户可以按N作为激活这一项的简捷键。菜单打开后这个菜单的控件名设置成mnuNewFileSpec。这个控件的Click事件过程是: Private Sub mnuNewFileSpec Click Unload Form1 Load Form1 GetFile End Sub Unload Form1这个代码行清除控件数组的旧元素。GetFile 处理过程是这样的: Public Sub GetFile ( ) 'local variables Dim FileSpec As String Form2. Hide FileSpesc=InputBox$ ("File specification?") If FileSpesc= "" Then Directons Else Form1.Show DisplayFiles (FileSpec) End If End Sub 在启动窗体上显示文件的详细住处包含在一个通用过程DisplayFiles中,该过程只有一个参数,该过程如下: Public Sub DisplayFiles (FileSpec As String) ‘Local variables Dim NameOfFile As String Dim ControlIndex As Integer Form1 .Show Form1.Width=8000 Form1.Height=5500 Form1.Garbage.Move 7000,4200 'move the garbage can icon NameOfFile=Dir $(FileSpec) If NameOfFile= " " Then MsgBox "No Files found with that file specification End If ControlIndex= ControlIndex +1 'start with index=1 Do While NameOgFile<> "" Load Form1.Files(ControlIndex) Load Form1.FileName(Contro;Index) Column=(ControlIndex Mod 6) Row=(ControlIndex-1)\6 Form1.Files(ControlIndex).Move(1300*Column)+275, 800*Row+2 'to allow for menu Form1.FileName(ControlIndex).Move 1300*Column, 800*(Row+1) Form1.Files(ControlIndex).Visible=True Form1.Filename(ControlIndex).Visible=True Form1.Filename(ControlIndex).Caption=NameOfFile ControlIndex= ControlIndex+1 If ControlIndex >30 Then MsgBox("Too many files!") Exit Do End If NameOfFile=Dir$ Loop End Sub DO循环实现将图片框及标签分隔开,分隔的间距通过用不同的值试验确定。就像控件数组中的所有新元素一样,在将Visible特性设置成True之前,它们都是不可见的。 为了结束程序,只需将事件过程与窗体上的Quit菜单项关联,并增加一个查询Unload事件来结束程序。 Sub mnuQuit_Click() Unload Form2 Unload Me End Sub Sub Form_Unload(Cancel As Integer,Unload Mode As Integer) End End Sub 以上程序的设计方法,介绍了怎样在Visual Basic中如何用鼠标拖动删除文件以及对文件的处理方法。程序设计通过控制鼠标的动态操作,使得用户操作时感到方便直观。如果在自己开发的的程序中能做到这些,就可以让自己的程序也会具有Windows风格。当然实现鼠标拖动删除文件方法很多,此处谈论的方法供各位同仁参考。
我给你出一个笨主意,也许对你有帮助,呵。 建一个批处理文件AA.bat,里面的内容类似以下: del C:\TEMP\*.*然后在程序里用: shell(".\AA.bat") 就一切OK了。 呵,这是个笨办法,不过我想很实用的,哈哈。
也许这儿这个方法是你要的吧: 首先,你要添加引用,点“工程”-》“引用”,添加“Microsoft Scripting Runtime”。 然后,建一个窗体,加一个按钮,双击按钮,在按钮的按下代码中写入以下代码:Dim fso As New FileSystemObject, fil1 Set fil1 = fso.GetFile("D:\AA.txt")以上假设你要删除的文件为D:盘根目录下的AA.txt,请根据你的要求改。 如果是大批量的删东西,我想,你可以利用别的控件和方法得到各文件名,就不是你的题的范围了。(当然,如果是那样,我个人还是以为,利用DOS的批处理来得方便,哈哈。)
不好意思,少了一行代码,呵,更正,代码是下面的: Dim fso As New FileSystemObject, fil1 Set fil1 = fso.GetFile("D:\AA.txt") fil1.Delete
TO: James0001(See-Plus-Plus) 我不太懂你说的意思。能说的清楚一点么?谢谢!
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As LongPrivate Type SHFILEOPSTRUCT hwnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Long hNameMappings As Long lpszProgressTitle As Long End TypeConst FO_DELETE = &H3 Const FOF_NOCONFIRMATION = &H10& Const FOF_ALLOWUNDO = &H40& Const SHERB_NORMAL = &H0 ' ----------------------------------------------- 以下是代码 Dim shfo As SHFILEOPSTRUCT With shfo .wFunc = FO_DELETE .pFrom = FILE '******** 把 FILE 替换成有效的文件名 ********** .fFlags = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION End WithCall SHFileOperation(shfo)
请各个高手指点一二。
请大家帮帮忙!谢谢了!
要不就findwindow后sendmessage wm_close
你说API也可以,能给教我怎么实现么?谢谢!
声明:
Public Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As Long
End TypePublic Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As LongPublic Const FO_DELETE = &H3
Public Const FOF_ALLOWUNDO = &H40
代码:
Dim SHop As SHFILEOPSTRUCT
Dim strFile as stringWith SHop
.wFunc = FO_DELETE
.pFrom = strFile + Chr(0)
.fFlags = FOF_ALLOWUNDO
End WithSHFileOperation SHop
作者:土人
在标准工程中添加一个公共对话框和两个按钮即可尝试本例:Option Explicit'删除文件的API
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As ToBin) As Long
'清空回收站的API
Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (ByVal hwnd As Long, ByVal pszRootPath As String, ByVal dwFlags As Long) As LongPrivate Type ToBin
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As Long
End TypeConst FO_DELETE = &H3
Const FOF_ALLOWUNDO = &H40
Const SHERB_NORMAL = &H0'将文件移至回收站
Private Sub Command1_Click()
Dim Go As ToBin
Dim strFile As String
With CommonDialog1
.Filter = "(*.bak)|*.bak"
.DialogTitle = "删除文件"
.ShowOpen
strFile = .FileName
End WithWith Go
.wFunc = FO_DELETE
.pFrom = strFile
.fFlags = FOF_ALLOWUNDO
End WithSHFileOperation Go
End Sub'清空回收站
Private Sub Command2_Click()
Dim RetVal As Long
RetVal = SHEmptyRecycleBin(0&, vbNullString, SHERB_NORMAL)
End Sub
http://tech.sina.com.cn 2000/09/29 软件世界 王福生 杨洪勇
在Windows 95中删除一个文件或文件夹,只需用鼠标拖动文件(夹)到回收站,然后松开鼠标按钮即可,这种可视化的操作给用户带来了很大方便。如果程序开发人员在自己的程序中能做到这样,在自己的程序中也增加一个和Windows中风格相同的回收站,那么开发出的程序一定会受到用户的欢迎。怎么才能完成这种操作呢?本文介绍一种使用Visual Basic编程来完成这个动作的方法。 在Microsoft Windows资料中将按下鼠标按钮移动对象称为拖,将鼠标按钮的松开称为放。在Visual Basic中,如果项目中使用多个窗体,可以把一个图标从一个窗体拖放到另一个窗体。控件允许两种拖动,这取决于DragMode特性的两个不同的值。缺省情况是DragMode特性的值为0,除特定情况外不允许拖动控件;将这个特性的值改成1(Automatic)意味着用户可以拖动控件。 下面介绍拖动鼠标删除文件方法的实现过程。在Visual Basic的项目中允许用户拖动代表文件的图标至处理单元,此单元相当于Windows 95中的回收站,在给出警告之后把文件从磁盘中删除。 第一步,首先启动一个有两个窗体的项目,在启动窗体的下角加一个图片框(或图像控件),将这个控件的Picture特性设置成TRASH03.ICO文件中的图标,该文件位于Icon库的Computer子目录中。如果使用图片框,将AutoSize特性设置成True(如果选择一个图像控件,将Stretch特性设置成False)。 第二步,建立两个控件数组,一个是控件名为FileName的标签数组,另一个名字为Files的图像控件数组。将图像控件的DragMode特性设置成1(Automatic);将Visble特性设置成False,使标签和图像控件在运行时都不可见。通常,这些控件数组中的所有后续元素都继承这些特性。 这个项目中的大多数工作都体现在下面的DragDrop事件过程中: Private Sub Garbage_DragDrop(Source As Control,X As Single,Y As Single)
‘local variables
Dim Msg As String
Dim ControlIndex As Integer,YesNo As Integer
ControlIndex=Source.Index
Forml.FileName(ControlIndex).Visble=False
Msg= "Do you really want to delete"+
Forml.FileName(ControlIndex).Caption
YesNo=MsgBox(Msg,vbYesNo, "Confirmation Box")
If YesNo=vbYes Then
Kill(Forml.FileName(ControlIndex).Caption)
Unload Files(ControlIndex)
Unload Forml.FileName(ControlIndex)
Else
Forml.FileName(ControlIndex).Visible=True
Forml.File(ControlIndex).Visible=True
End If
End Sub 该事件过程中的ControlIndex这一行代码找出被拖动控件的索引;接下来的两行代码使图片框和标签在放置操作后暂时不可见。ControlIndex变量让Visual Basic从标签数组中提取标题(也就是文件名)。消息框的类型为=vbYesNo,因此是个Yes/No消息框,标题是Confirmation Box。Kill命令从磁盘中删除文件。一旦程序删除了文件,就从控件数组中卸除标签和图片框。如果用户操作有误,确认的消息框返回No,则程序代码使得原来的图片框和标签再次显现。 下一步,建立一个称为Directons的通用过程,在一个窗体上显示出给用户提供的这个应用程序所需的信息,该窗体用作一个定制对话框。 Sub Directons ()
Forml.Hide
Form2.Show
Form2.Cls
Form1.Print "This program illustrates dragging and dropping mouse operations."
Form2.Print "The user gives a file spec inside the message box and a form"
Form2.Print "appears with icons labelled by all the files with that file specifcation."
Form2.Print "The user can drag the icon to be 'flushed' away i. e. deleted."
End Sub 对话框上OK按钮的Click过程是: Private Sub btnOK-Click ()
Me.Hide
Form1.Show
End Sub 启动窗体的Form-Load 过程需要装入Directons窗体并调用显示信息的通用过程。它可以这样的: Private Sub Form-Load ()
Load Form2
Directons
End Sub 启动窗体上的File 菜单有以下两项: New File Spec Exit 单击New File Spec菜单项让用户查看新的目录或驱动器。这个菜单项会调用一个通用过程GetFile,从磁盘读入文件名。 最后,是如何处理新的文件说明。用户第一次使用这个应用程序时,Visual Basic装入两个控件数组中一定数目的元素。程序需要改变标题中所含的信息,这些标题含有要删除的文件的名字。这两个控件数组只装入一次,然后使用Dir $命令建立一个字符串,从磁盘读入住处后将这个数组中的值赋给标签的Caption特性。该程序代码要读磁盘信息两次来恰当地重新确定数组尺寸。至于菜单项,因为“N”加了下划线,用户可以按N作为激活这一项的简捷键。菜单打开后这个菜单的控件名设置成mnuNewFileSpec。这个控件的Click事件过程是: Private Sub mnuNewFileSpec Click
Unload Form1
Load Form1
GetFile
End Sub
Unload Form1这个代码行清除控件数组的旧元素。GetFile 处理过程是这样的:
Public Sub GetFile ( )
'local variables
Dim FileSpec As String
Form2. Hide
FileSpesc=InputBox$ ("File specification?")
If FileSpesc= "" Then
Directons
Else
Form1.Show
DisplayFiles (FileSpec)
End If
End Sub 在启动窗体上显示文件的详细住处包含在一个通用过程DisplayFiles中,该过程只有一个参数,该过程如下: Public Sub DisplayFiles (FileSpec As String)
‘Local variables
Dim NameOfFile As String
Dim ControlIndex As Integer
Form1 .Show
Form1.Width=8000
Form1.Height=5500
Form1.Garbage.Move 7000,4200 'move the garbage can icon
NameOfFile=Dir $(FileSpec)
If NameOfFile= " " Then
MsgBox "No Files found with that file specification
End If
ControlIndex= ControlIndex +1 'start with index=1
Do While NameOgFile<> ""
Load Form1.Files(ControlIndex)
Load Form1.FileName(Contro;Index)
Column=(ControlIndex Mod 6)
Row=(ControlIndex-1)\6
Form1.Files(ControlIndex).Move(1300*Column)+275, 800*Row+2 'to allow for menu
Form1.FileName(ControlIndex).Move 1300*Column, 800*(Row+1)
Form1.Files(ControlIndex).Visible=True
Form1.Filename(ControlIndex).Visible=True
Form1.Filename(ControlIndex).Caption=NameOfFile
ControlIndex= ControlIndex+1
If ControlIndex >30 Then
MsgBox("Too many files!")
Exit Do
End If
NameOfFile=Dir$
Loop
End Sub DO循环实现将图片框及标签分隔开,分隔的间距通过用不同的值试验确定。就像控件数组中的所有新元素一样,在将Visible特性设置成True之前,它们都是不可见的。 为了结束程序,只需将事件过程与窗体上的Quit菜单项关联,并增加一个查询Unload事件来结束程序。 Sub mnuQuit_Click()
Unload Form2
Unload Me
End Sub
Sub Form_Unload(Cancel As Integer,Unload Mode As Integer)
End
End Sub 以上程序的设计方法,介绍了怎样在Visual Basic中如何用鼠标拖动删除文件以及对文件的处理方法。程序设计通过控制鼠标的动态操作,使得用户操作时感到方便直观。如果在自己开发的的程序中能做到这些,就可以让自己的程序也会具有Windows风格。当然实现鼠标拖动删除文件方法很多,此处谈论的方法供各位同仁参考。
建一个批处理文件AA.bat,里面的内容类似以下:
del C:\TEMP\*.*然后在程序里用:
shell(".\AA.bat")
就一切OK了。
呵,这是个笨办法,不过我想很实用的,哈哈。
首先,你要添加引用,点“工程”-》“引用”,添加“Microsoft Scripting Runtime”。
然后,建一个窗体,加一个按钮,双击按钮,在按钮的按下代码中写入以下代码:Dim fso As New FileSystemObject, fil1
Set fil1 = fso.GetFile("D:\AA.txt")以上假设你要删除的文件为D:盘根目录下的AA.txt,请根据你的要求改。
如果是大批量的删东西,我想,你可以利用别的控件和方法得到各文件名,就不是你的题的范围了。(当然,如果是那样,我个人还是以为,利用DOS的批处理来得方便,哈哈。)
Dim fso As New FileSystemObject, fil1
Set fil1 = fso.GetFile("D:\AA.txt")
fil1.Delete
我不太懂你说的意思。能说的清楚一点么?谢谢!
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As Long
End TypeConst FO_DELETE = &H3
Const FOF_NOCONFIRMATION = &H10&
Const FOF_ALLOWUNDO = &H40&
Const SHERB_NORMAL = &H0
' ----------------------------------------------- 以下是代码
Dim shfo As SHFILEOPSTRUCT
With shfo
.wFunc = FO_DELETE
.pFrom = FILE '******** 把 FILE 替换成有效的文件名 **********
.fFlags = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION
End WithCall SHFileOperation(shfo)