-1

私は現在、個人用のアプリケーションに取り組んでいます。アイデアは、それを開いて、コンピューターのあらゆる種類の統計 (ごみ箱、ドライブ、ネットワークなど) に到達できるということです。今、私はSHQueryRecycleBinWin 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 に答える