Passa ai contenuti principali

Gestiamo il cestino di Windows con VB.NET

In questo post vorrei proporvi una classe che, grazie all’utilizzo di P/Invoke, permette di gestire il cestino di Windows.

La classe è una classe statica (un Helper) che dispone di due metodi:

  • Empty() : permette di svuotare il cestino (con la possibilità di scegliere alcune opzioni quali la richiesta di conferma, il sonoro e la finestra di progress della cancellazione);
  • GetSize() : permette di ricavare il numero di elementi presenti nel cestino e la loro dimensione.

La classe è la seguente:

Imports System.Runtime.InteropServices

Public Class RecycleBinHelper
Private Const S_OK = 0
Private Const S_Empty = -2147418113

<DllImport("shell32.dll")>
Private Shared Function SHEmptyRecycleBin(ByVal hWnd As IntPtr, ByVal pszRootPath As String, ByVal dwFlags As UInt32) As Integer

End Function

<DllImport("shell32.dll")>
Private Shared Function SHQueryRecycleBin(ByVal pszRootPath As String, ByRef pSHQueryRBInfo As SHQUERYRBINFO) As Integer

End Function

Public Shared Function GetSize(ByRef numItems As Integer, ByRef totalSize As Int64) As Boolean
Dim retval = False
Dim shrb = New SHQUERYRBINFO()
shrb.cbSize
= Marshal.SizeOf(GetType(SHQUERYRBINFO))
If SHQueryRecycleBin(String.Empty, shrb) = S_OK Then
totalSize
= shrb.i64Size
numItems
= CInt(shrb.i64NumItems)
retval
= True
End If
Return retval
End Function

Public Shared Function Empty(Optional ByVal flags As RecycleBinOptions = 0) As Boolean
Dim retval = True
Dim hresult = SHEmptyRecycleBin(IntPtr.Zero, String.Empty, CUInt(flags))
If hresult <> S_OK And hresult <> S_Empty Then
retval
= False
End If
Return retval
End Function

<StructLayout(LayoutKind.Sequential, Pack:=4)>
Private Structure SHQUERYRBINFO
Public cbSize As Int32
Public i64Size As Long
Public i64NumItems As Long
End Structure
End Class

<Flags()>
Public Enum RecycleBinOptions
NoConfirmation
= 1
NoProgressUI
= 2
NoSound
= 4
End Enum





Per eseguire le operazioni sul cestino vengono utilizzate le due API SHEmptyRecycleBin (info) e SHQueryRecycleBin (info) presenti nella dll shell32.dll.



Un esempio di utilizzo della classe è il seguente:



Sub Main()
Dim size As Int64
Dim numItems As Int32
If RecycleBinHelper.GetSize(numItems, size) Then
Console.WriteLine(
String.Format("Sono presenti {0} elementi per un totale di {1} bytes",
numItems, size))
End If

If RecycleBinHelper.Empty(RecycleBinOptions.NoConfirmation) Then
Console.WriteLine(
"Cestino svuotato!!!")
End If

Console.ReadLine()
End Sub





Commenti

Post popolari in questo blog

VB.NET : Aggregare stringhe con LINQ

Tip facile facile, ma a qualcuno potrebbe servire. Supponiamo di avere una lista di stringhe (magari come risultato di una query LINQ) e di voler ottenere una stringa con la concatenazione delle stesse: Dim list = CreateList() Dim concatStr = (From s In list _ Select s).Aggregate( Function (currentString, nextString) currentString + nextString) MessageBox.Show(concatStr) Il metodo CreateList non ci interessa, in questo momento, ma crea una lista di oggetti String. Protected Function CreateList() As IEnumerable( Of String ) Dim list As String () = {" stringa1 ", " stringa2 ", " stringa3 ", " stringa4 ", " stringa5 "} Return list.AsEnumerable() End Function Questo metodo potrebbe restituire una qualsiasi lista di oggetti di cui, nella select successiva recuperiamo solo stringhe. La stessa tecnica è utilizzabile per concatenare stringhe inserendovi un carattere separatore Dim list = CreateList() Dim

VB.NET: SplashScreen con effetto fade-in

In questo post vorrei proporvi un modo per realizzare una splash screen per le nostre applicazioni Windows Form che appare progressivamente con un effetto fade. Supponiamo di avere il nostro progetto VB.NET in una soluzione Visual Studio 2008 in cui abbiamo il sorgente della nostra applicazione Windows Form. Inseriamo una splash screen utilizzando il menù Progetto->Aggiungi Nuovo Elemento e selezionando il tipo di elemento “Schermata Iniziale” A questo punto Visual Studio creerà, automaticamente, la schermata iniziale che possiamo personalizzare graficamente come vogliamo. Per poter fare in modo che questa finestra appaia nel momento in cui avviamo l’applicazione, è necessario aprire le proprietà del progetto e impostare la maschera di avvio: In questo modo, all’avvio dell’applicazione, la schermata appare immediatamente e scompare un attimo prima della visualizzazione della finestra dell’applicazione. Possiamo far apparire la schermata iniziale con un ef

VB.NET: Convertire un file DOC in RTF e PDF con office interop

In questo post vorrei proporvi del codice per poter convertire un file .doc in un file .rtf oppure .pdf utilizzando le API di interoperabilità di Office. Creeremo una classe, DocConverter, che esporrà le due funzionalità sopra citate. Cominciamo con il prevedere un attributo privato della classe che rappresenterà l’applicazione Word che utilizzeremo per la conversione. Creeremo l’istanza dell’attributo privato all’interno del costruttore della classe: Public Sub New () If Not CreateWordApp() Then Throw New ApplicationException(" Assembly di interoperabilità con Office non trovato! ") End If End Sub Private _wordApp As Word.ApplicationClass Protected Function CreateWordApp() As Boolean Dim retval = True Try _wordApp = New Word.ApplicationClass() _wordApp.Visible = False Catch ex As System.Exception _wordApp = Nothing retval = False End Try Return retval End Function La conve