2011-07-12 132 views
-1

我目前正在爲我個人使用的應用程序工作。這個想法是,你可以打開它並達到你的計算機的所有類型(回收站,驅動器,網絡和更多)。現在我正在使用Win API的SHQueryRecycleBinVB.NET - SHQueryRecycleBin的問題

雖然我有一些問題。而且我試圖查看過時的VB6或VB.NET解決方案的解決方案,這些解決方案根本無法工作。我使用this source的代碼參考,並檢索我使用的文件的大小和數量this source

我把它放在一個計時器,並且這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,但想要一個可以與大多數系統交互的防彈代碼。

+0

如何聲明API函數和LPSHQUERYRBINFO結構?請提供代碼。 –

回答

0

我沒有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 

請注意類型「currency」的使用 - 這是因爲vb6對於64位整數沒有正常的數據類型。類型Currency使用8個字節,但保留4位小數,因此乘以10000以獲得結果。

+0

我得到它的工作。我使用了我所看到的項目中的整個庫,並最終獲得了文件的大小和數量。 – Humanoidism