-1

我目前正在开发一个供我个人使用的应用程序。这个想法是,您可以打开它并获取计算机的所有类型的统计信息(回收站、驱动器、网络等等)。现在我正在使用SHQueryRecycleBin来自 Win API。

虽然我有一些问题。而且我试图查看过时的 VB6 或 VB.NET 解决方案,这些解决方案根本不起作用。我使用了来自这个来源的代码参考,并检索了我使用这个来源的文件的大小和数量。

我把它放在一个计时器中,在运行了 100 个滴答声(我设置的)之后,我收到了这个错误:

File I/O of a structure with field 'cbSize' of type 'UInt32' is not valid.

的类型cbSizeUInteger(显然)自动更改为UInt32- 我认为它基于系统。

您应该注意到我使用的是 Windows 7 x86(64 位)。如果有比使用 Win API 更容易的代码或其他代码的解决方案,请告诉我。

我看过System.Management但想要一个可以与大多数系统交互的防弹代码。

4

1 回答 1

1

我没有方便测试的 vb.net,但以下代码在 vb6 中运行良好:

在一个模块中:

Public Type SHRECYCLEBININFO
  cbSize As Long
  i64Size As Currency
  i64NumItems As Currency
End Type
Public Declare Function SHQueryRecycleBin Lib "shell32.dll" Alias "SHQueryRecycleBinA" (ByVal pszRootPath As String, pSHQueryRBInfo As SHRECYCLEBININFO) As Long

并以一种形式:

Private Sub Command1_Click()
    Dim info As SHRECYCLEBININFO
    Dim res As Long

    info.cbSize = Len(info)
    res = SHQueryRecycleBin("C:\", info)
    MsgBox "size: " & (info.i64Size * 10000) & " bytes" & vbCrLf & "items: " & (info.i64NumItems * 10000)
End Sub

注意“货币”类型的使用——这是因为 vb6 没有 64 位整数的正常数据类型。类型Currency使用 8 个字节,但保留 4 个小数位,因此乘以 10000 得到结果。

于 2011-07-12T12:47:47.840 回答