2011-07-12 20 views
-1

私は現在、私の個人的な使用のためのアプリケーションで作業しています。アイデアはあなたがそれを開き、あなたのコンピュータのすべての種類の統計に達することができるということです(ごみ箱、ドライブ、ネットワークなど)。今私はWindows APIからSHQueryRecycleBinを使って作業していました。VB.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. 

cbSizeのタイプはUIntegerである(明らかに)への自動変更を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 

タイプ "通貨"の使用に注意してください。これは、vb6に64ビット整数の通常のデータ型がないためです。タイプCurrencyは8バイトを使用していますが、小数点以下4桁を保持しています。その結果、10000を掛けて結果を取得します。

+0

私はそれを働かせました。私が見たプロジェクトのライブラリ全体を使って、最終的にファイルのサイズと数を得ました。 – Humanoidism

関連する問題