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: 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:PublicSubNew()
IfNot CreateWordApp() Then
ThrowNew ApplicationException("Assembly di interoperabilità con Office non trovato!")
EndIf
EndSub
Private _wordApp As Word.ApplicationClass
ProtectedFunction CreateWordApp() AsBoolean
Dim retval = True
Try
_wordApp = New Word.ApplicationClass()
_wordApp.Visible = False
Catch ex As System.Exception
_wordApp = Nothing
retval = False
EndTry
Return retval
EndFunction

La conversione del file doc sarà effettuata aprendo il file stesso ed eseguendo un’operazione di SaveAs:

Pr…

VB.NET for Dummies: Gli Eventi

Vorrei iniziare con questo post una serie dedicata ad aspetti di VB.NET di base che possono essere utile a coloro che si avvicinano al mondo .NET e che, in genere, non vengono trattati a livello base.La serie di post non ha la pretesa di essere assolutamente esaustivi sugli argomenti che tratteròIn questo primo post parleremo degli eventi.Cosa sono e a cosa servonoUn evento è la “notifica” dell’accadimento di qualcosa.Quando, ad esempio, premiamo un bottone della finestra di un’applicazione, dietro le quinte, il bottone stesso “notifica” al mondo circostante che qualcuno, in quell’istante, lo ha premuto.Sta, poi, al mondo circostante preoccuparsi di “intercettare” l’evento stesso per gestirlo (tramite un gestore di evento).Attenzione a non confondere la pressione del tasto con la “notifica” della pressione del tasto: l’evento è la “notifica” dell’accadimento, non l’accadimento stesso.Ma a cosa serve tutto ciò?Utilizzare gli eventi è un modo per disaccoppiare due o più attori del nostr…

Creare uno shortcut con VB.NET

Prendendo spunto da un post comparso sul forum MSDN vorrei proporvi un tip su come creare uno shortcut utilizzando VB.NET.Per poter creare uno shortcut possiamo procedere in due modi: o ci studiamo la struttura del file .lnk e scriviamo una classe che è in grado di ricreare tale struttura oppure utilizziamo Windows Scripting Host.La prima soluzione è percorribile ma laboriosa perchè la struttura di un file lnk non è banale. Chi fosse interessato a vedere come è composto, internamente, un file lnk può scaricare la seguente reference guide (link).Io vorrei proporvi la seconda strada e realizzerò una classe che incapsula l’utilizzo di Windows Scripting Host.L’object model di Windows Scripting Host è contenuto nella dll IWshRuntimeLibrary che può essere referenziata, nel nostro progetto, utilizzando il tab COM della finestra di aggiunta delle reference:Tra gli oggetti che troviamo all’interno della libreria utilizzeremo la classe WshShell e la classe WshShortcut.La prima delle due rappres…