VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB问题全功略(55)
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:10690, 日期:2002-02-03
VB问题全功略(55)

271、如何知道资源回收站中有几个已删除的文件,占了多少空间?
272、如何清空资源回收站?
273、如何处理在 Access 数据库中的 Null 值?
274、如何在 MIDForm 中控制 KeyPress 事件?
275、如何进行位操作?

271、如何知道资源回收站中有几个已删除的文件,占了多少空间?

网际网路的发展日益蓬勃的今天,很多人都喜欢到网路上下载文件、试用、删除文件!一直循环。

您是否随时注意您的资源回收站,是否有太多尚未清除的文件?这些您删除的文件并未真正删除,它们都还堆在资源回收站中,也都还是占住了您的硬盘空间!

当您打开资源回收站时,在状态列中,您总是可以看到现在有多少个物件在其中,占了多少空间。这些资讯您不用进入资源回收站,也可以在 VB 中利用 SHQueryRecycleBin API 计算出来!

在声明 SHQueryRecycleBin API 之前,由于它使用了一个 SHQUERYRBINFO Structure,所以您必须先声明 SHQUERYRBINFO,而 SHQUERYRBINFO Structure 中又使用到了上一个主题问题218:如何求出磁盘大小及剩余空间大小 (含大于 2GB 的正确算法)中提到的 ULARGE_INTEGER Structure,所以您也必须声明 ULARGE_INTEGER Structure,声明如下:

Type ULARGE_INTEGER
LowPart As Long
HighPart As Long
End Type

Type SHQUERYRBINFO
cbSize As Long
i64Size As ULARGE_INTEGER
i64NumItems As ULARGE_INTEGER
End Type

Declare Function SHQueryRecycleBin Lib "shell32.dll" Alias "SHQueryRecycleBinA" (ByVal pszRootPath As String, pSHQueryRBInfo As SHQUERYRBINFO) As Long

参数说明如下:

pszRootPath:资源回收站路径(不一定是根目录),如果使用空字串,则表示要查询所有资源回收站的资讯。
pSHQueryRBInfo:返回资源回收桶中目前有多少物件,占了多少 Bytes。

范例如下:找出 C 磁盘中的资源回收站中目前有多少物件,占了多少 Bytes。

Private Sub Command1_Click()
Dim rbinfo As SHQUERYRBINFO 注释: 资源回收站的资讯
Dim retval As Long 注释: 返回值
注释: 初始化 rbinfo 的大小
rbinfo.cbSize = Len(rbinfo)
注释: 查询资源回收站的内容
retval = SHQueryRecycleBin("C:\", rbinfo) 注释: the path doesn注释:t have to be the root path
注释: 显示资源回收站中目前有多少物件
If (rbinfo.i64NumItems.LowPart And &H80000000) = &H80000000 Or rbinfo.i64NumItems.HighPart > 0 Then
Label1 = "资源回收站中有超过 2,147,483,647 个物件"
Else
Label1 = "资源回收站中包含 "; rbinfo.i64NumItems.LowPart; " 个物件"
End If
注释: 显示资源回收站中的物件,占了多少 Bytes。
If (rbinfo.i64Size.LowPart And &H80000000) = &H80000000 Or rbinfo.i64Size.HighPart > 0 Then
Label2 = "资源回收站中包含超过 2,147,483,647 个字节"
Else
Label2 = "资源回收站中包含 "; rbinfo.i64Size.LowPart; " 个字节"
End If
End Sub

注意:以上的功能有以下 OS 本身及 IE 版本的限制

Windows 95 必须安装 IE 4.0 以后的版本,且必须使用整合界面才行!
Windows NT 4.0 必须安装 IE 4.0 以后的版本,且必须使用整合界面才行!
Windows 98 及 Windows 2000 均已支持!
Windows CE 则根本不支持!

272、如何清空资源回收站?

在问题:如何知道资源回收站中有几个已删除的文件,占了多少空间?中,我们使用了 SHQueryRecycleBin API 查出了资源回收站中目前有多少物件,占了多少 Bytes。那我们要如何在 VB 中来清除资源回收站中的垃圾文件呢?

在进入主题之前,必须先告诉大家,在您清空资源回收站时,系统会自动更改资源回收站的图示变成空桶图示,所以,进行中若有错误发生,您还必须还原资源回收站的图示!
清空资源回收站,我们使用 API SHEmptyRecycleBin Function
还原资源回收站的图示,则是使用 API SHUpdateRecycleBinIcon Function

在声明区中加入以下声明:

Public Const SHERB_NOCONFIRMATION = &H1
Public Const SHERB_NOPROGRESSUI = &H2
Public Const SHERB_NOSOUND = &H4

Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (ByVal hwnd As Long, ByVal pszRootPath As String, ByVal dwFlags As Long) As Long
Declare Function SHUpdateRecycleBinIcon Lib "shell32.dll" () As Long

参数说明如下:

hwnd:某一个 Window 的 Handle
pszRootPath:资源回收站路径(不一定是根目录),如果使用空字串,则表示要清空所有资源回收站。
dwFlags:0 或是使用以下之常数:

SHERB_NOCONFIRMATION:表示不显示确认视窗
SHERB_NOPROGRESSUI:表示不显示清空资源回收站的动画视窗 (经测试98原本已不会出现动画)
SHERB_NOSOUND:表示清空资源回收站之后不出现声音

范例如下:清空所有资源回收站中(不显示清空资源回收站的动画视窗):

Private Sub Command2_Click()
Dim retval As Long 注释: return value
注释: 清空所有资源回收站, 不确认
retval = SHEmptyRecycleBin(Form1.hwnd, "", SHERB_NOCONFIRMATION)
注释: 若有错误讯息出现,则回复资源回收站的图示
注释: 其实这一点不是很需要
If retval <> 0 Then 注释: error
retval = SHUpdateRecycleBinIcon()
End If
End Sub

注意:以上的功能有以下 OS 本身及 IE 版本的限制

Windows 95 必须安装 IE 4.0 以后的版本,且必须使用整合界面才行!
Windows NT 4.0 必须安装 IE 4.0 以后的版本,且必须使用整合界面才行!
Windows 98 及 Windows 2000 均已支持!
Windows CE 则根本不支持!
273、如何处理在 Access 数据库中的 Null 值?

Access 的字符串字段可以包含 NULL 值。在读这些字段到 VB 的 String 变量时,会出现运行时间的错误。最好的解决方法是使用 & 操作符将该字段与空串连接:

sString = "" & RS(0)

274、如何在 MIDForm 中控制 KeyPress 事件?

MDIForm 中是没有 KeyPress 事件的, 而在 MDIForm 中加入的 Picture 有, 那么只要在 MDIForm 中动手脚:

Private Sub MDIForm_Activate()
Picture1.SetFocus
End Sub

Private Sub MDIForm_Click()
Picture1.SetFocus
End Sub

Private Sub Picture1_KeyPress(KeyAscii As Integer)
Debug.Print "In KeyPress"
End Sub

275、如何进行位操作?

以下运算符可以直接进行位操作:
And Eqv Imp Not Or Xor
如: 3 or 2 值为 2