Mega Code Archive

 
Categories / Delphi / System
 

Geri dönüşüm kutusu [ recycle bin ] ndaki dosya sayısının bulunması

Geri Dönüşüm Kutusu ( Recycle Bin )'nda kaç adet dosya olduğunu öğrenmek için aşağıdaki kodu kullanabilirsiniz. { Öncelikle shell32.dll içinden çağıracağımız fonksiyonda kullanacağımız tip tanımlamalarını yapmamız gerekli. } type ULarge_Integer=record {Bu tipi tanımlamamızdaki neden, Pascal'da 64-bitlik işaretsiz bir tamsayı değişkeni olmaması. TSHQUERYRBINFO tipinde, değerleri yazdırtacağımız i64Size ve i64NumItems değişkenleri 64-bitlik işaretsizbir tamsayı değişkenine ihtiyaç duymakta. Biz ise -tabiri yerinde ise- shell32.dll'i aldatacağız.} LowPart: Cardinal; HighPart: Cardinal; end; type TSHQUERYRBINFO = record {Shell32.dll'den çağıracak olduğumuz fonksiyonun verilerinin aktarılacağı kayıt değişkeni için gerekli} cbSize: DWord; i64Size: ULarge_Integer; // Toplam dosya boyutu yazılacak i64NumItems: ULarge_Integer; // Toplam dosya sayısı yazılacak end; function SHQueryRecycleBin(pszRootPath: PAnsiChar; var pSHQueryRBInfo: TSHQUERYRBINFO): HRESULT; stdcall; {Delphi için fonksiyonu tanımladık} {Şimdi de implementation kısmına geçiyoruz.} implementation ... ... function SHQueryRecycleBin; external 'SHELL32.DLL' name 'SHQueryRecycleBinA'; {Delphi'ye fonksiyonumuzu nereden ve hangi isimle çağıracağımızı da söyledik.} {Buraya kadar herşeyi hallettik. Şimdi de kendi fonksiyonumuzu yazabiliriz.} function FileCountInRecycleBin: string; var SHQUERYRBINFO: TSHQUERYRBINFO; hr: HRESULT; begin //Written by Mert DOĞAN ( mertdogan@hotmail.com ). //You can freely use this code but remove these lines. shqueryrbinfo.cbSize:=sizeof(TShQueryRBInfo); HR:=ShQueryRecycleBin(PAnsiChar(''), shqueryrbinfo); {Buradaki PAnsiChar('') tip değiştirmesi çok önemli. İnternette saatlerce yaptığım incelemelerde tüm kodlar fos çıktı ve çalışmadı. Benim de aklıma böyle bir değişiklik yapmak geldi ve çalıştığını gördüm. Bir de birşeyi daha söylemeden edemeyeceğim. pszRootPath değişkenine verdiğimiz değer olan PAnsiChar('') değeri çelişkili. Okuduğum hemen hemen tüm kaynaklarda bu, 'C:\' olarak geçiyor. Hiçbirisi '' olarak değer uygun görmemiş(Tabi bunlarda PAnsiChar tip değiştirmesi de yoktu). Ancak SHEmptyRecycleBinA'da da aynı durum söz konusu ama kaynaklar bu defa '' değerini atamayı uygun görmüş ve bu konuda bir açıklama da yapılmamış. Aslında olay şu: Buraya atayacağımız değer hangi sürücüdeki recycled klasörünü okuyacaksak o sürücünün kök dizini olmalı. Ama ben yine de burayı boş bıraktım hani belki tüm sürücülerdekini okur diye ama siz yine de uygulamalarınızda buraya dikkat edin.} if Succeeded(hr) then Result:=inttostr(shqueryrbinfo.i64NumItems.LowPart +shqueryrbinfo.i64NumItems.HighPart) else Result:='Okunamadı'; end; {Son olarak shqueryrbinfo kaydının i64Size değişkeni ile toplam dosya boyutunu da öğrenebileceğinizi söylemek istiyorum ancak her dosya için 32768 byte'lık boyut veriyor olması soru işaretini çözdükten sonra tabii ki. Sağlıcakla kalın...} Mert DOĞAN ( mertdogan@hotmail.com )