Visual Basic Simple
Visualizzare la finestra delle proprietà di un file
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Ricerca personalizzata

Difficoltà: 2 / 5

All'interno di Windows tutti i files e le cartelle hanno una finestra delle proprietà dove vengono mostrati i dati dell'elemento scelto, quali la dimensione, il percorso all'interno del file system, il tipo di oggetto e, per alcuni tipi di files, finestre aggiuntive.

Normalmente per accedere alla finestra delle proprietà di un file basterà cliccare con il tasto destro del mouse sul file e scegliere la voce Proprietà.
Per effettuare la medesima cosa attraverso Visual Basic sarà necessario utilizzare la funzione API ShellExecuteEX che permette di eseguire determinate operazioni della Shell di Windows.

Vedremo in questo semplice HowTo come richiamare la finestra delle proprietà di un file attraverso la suddetta funzione API.
In questo progetto sarà necessario un formed un modulo standard in cui risiederanno le chiamate all'API.

Cominceremo proprio dal modulo standard:

  1. Option Explicit
  2. Private Type SHELLEXECUTEINFO
  3.     cbSize       As Long
  4.     fMask        As Long
  5.     hwnd         As Long
  6.     lpVerb       As String
  7.     lpFile       As String
  8.     lpParameters As String
  9.     lpDirectory  As String
  10.     nShow        As Long
  11.     hInstApp     As Long
  12.     lpIDList     As Long
  13.     lpClass      As String
  14.     hkeyClass    As Long
  15.     dwHotKey     As Long
  16.     hIcon        As Long
  17.     hProcess     As Long
  18. End Type
  19. Private Const SEE_MASK_INVOKEIDLIST = &HC
  20. Private Const SEE_MASK_NOCLOSEPROCESS = &H40
  21. Private Const SEE_MASK_FLAG_NO_UI = &H400
  22. Private Declare Function ShellExecuteEx Lib "SHELL32.DLL" (SEI As SHELLEXECUTEINFO) As Long

Alla riga 3 abbiamo definito un nuovo tipo di dati di nome SHELLEXECUTEINFO. Tale struttura è richiesta dalla funzione API.

Alle righe 21-23 abbiamo dichiarato tre costanti che utilizzeremo come parametri nella struttura SHELLEXECUTEINFO.

Infine, alla riga 25, abbiamo la dichiarazione della funzione ShellExecuteEx. Essa differisce dalla funzione ShellExecute, già vista in un altro HowTo ed in una richiesta dei lettori, per il fatto che permette di specificare una serie di parametri aggiuntivi che l'altra funzione non permette.

  1. Public Function ShowPropertiesDlg(ByVal FileName As String, ByVal OwnerhWnd As Long) As Long
  2.     Dim SEI As SHELLEXECUTEINFO
  3.     With SEI
  4.         .cbSize = Len(SEI)
  5.         .fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
  6.         .hWnd = OwnerhWnd
  7.         .lpVerb = "properties"
  8.         .lpFile = FileName
  9.         .lpParameters = vbNullChar
  10.         .lpDirectory = vbNullChar
  11.         .nShow = 0
  12.         .hInstApp = 0
  13.         .lpIDList = 0
  14.     End With

La nostra funzione si chiamerà ShowPropertiesDlg e richiede due parametri: il nome del file per il quale mostrare la finestra delle proprietà e l'handle della finestra chiamante.

Alla riga 28 abbiamo dichiarato la variabile SEI di tipo SHELLEXECUTEINFO. Essa accoglierà tutti i parametri da passare alla funzione ShellExecuteEx.

Così nelle righe 29-40 definiamo tali parametri: cbSize indica la dimensione della struttura, calcolata tramite l'istruzione Len; fMask definisce le modalità di visualizzazione e richiamo della funzione ed inseriremo i tre valori dichiarati prima come costanti; hWnd riceverà l'handle passato alla funzione; lpVerb richiede il nome dell'operazione da eseguire (properties); lpFile indica il nome del file per il quale eseguire l'operazione lpVerb. Tutti gli altri dati della struttura non saranno utilizzati in questa funzione, pertanto li lasceremo in bianco, cioè impostati a 0.

  1.     If (ShellExecuteEx(SEI) = 0) Then
  2.         ShowPropertiesDlg = 0
  3.     Else
  4.         ShowPropertiesDlg = SEI.hInstApp
  5.     End If
  6. End Function

Finalmente alla riga 41 abbiamo la chiamata alla funzione ShellExecuteEx passandole come parametro la struttura SEI. Se la funzione ritorna valore 0, tale sarà anche il valore ritornato dalla nostra funzione ShowPropertiesDlg; se la funzione ritorna un valore diverso da 0, sarà necessario leggere il contenuto del campo hInstApp della struttura SEI.

Terminata la scrittura del modulo standard possiamo passare alla progettazione del form che richiamerà la funzione appena vista.

Figura 1
Figura 1

Il form si compone di tre semplici controlli: una Labeldi nome Label1, una TextBoxdi nome txtFileName ed un CommandButtondi nome btnProperties.

L'utilizzo dell'interfaccia è ovvio: basterà inserire il nome di un file nella casella di testo e premere il pulsante "Proprietà del file" per vedere apparire la finestra delle proprietà corrispondente. Prima di fare questo, è necessario scrivere il codice che controlla la pressione del pulsante btnProperties.

  1. Option Explicit
  2. Private Sub btnProperties_Click()
  3.     Dim ret As Long
  4.     ret = ShowPropertiesDlg(txtFileName.Text, Me.hWnd)
  5.     If (ret <= 32) Then MsgBox "Errore!", vbCritical, "Errore"
  6. End Sub

La routine che regola l'evento Click del pulsante si compone di tre semplici righe.
Alla riga 4 dichiariamo la variabile ret che riceverà il valore restituito dalla chiamata della funzione ShowPropertiesDlg con il testo della casella txtFileName e l'handle della finestra (riga 5).

Se il valore restituito dalla funzione è minore o uguale di 32, siamo in presenza di qualche errore, ad esempio il nome del file specificato non esiste. Se tale valore è minore o uguale di 32, verrà mostrata un messaggio di errore (riga 6).

Figura 2Proviamo il nostro progetto.

Un click sopra il pulsante "Proprietà del file" mostrerà la finestra delle proprietà corrispondente.

Nel caso avessimo inserito un nome di file errato, sarebbe apparso invece il messaggio di errore.

Figura 3

La separazione della funzione ShowPropertiesDlg in un modulo standard rende molto semplice il suo utilizzo all'interno di altri progetti.

Roal Zanazzi
2 Febbraio 2001

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice degli HowTo