Visual Basic Simple
Avviare l'applicazione predefinita per un documento
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

Un'attività molto comune è quella di richiedere l'apertura dell'applicazione predefinita per un documento, ad esempio richiedere l'apertura del browser con riferimento ad un sito internet oppure avviare il Blocco note per visualizzare il contenuto di un file di testo o il lettore multimediale per ascoltare un brano audio. La problematica è stata affrontata anche in altri articoli ma, viste le continue richieste, ho deciso di pubblicare un articolo dedicato principalmente alla funzione ShellExecute.

Figura 1Il progetto preso in considerazione si comporrà di un solo form contenente alcuni semplici controlli: una prima Label di nome lblCollegamento, opportunamente adattata graficamente, apparirà come un normale collegamento ipertestuale. Per far ciò è bastato semplicemente assegnare la sottolineatura alla proprietà Font, modificare il colore, impostare la proprietà MouseIcon assegnandole il cursore a forma di mano tipico dei browser internet e quindi assegnare il valore 99 - Custom alla proprietà MousePointer.

Al di sotto di questa esiste un'altra etichetta puramente descrittiva e la relativa casella di testo txtDocumento; essa conterrà il percorso del documento da aprire. Il primo pulsante cmdAvvia richiamerà l'applicazione predefinita per il documento indicato, mentre il secondo pulsante cmdTrovaApplicazione mostrerà il percorso completo dell'applicazione che verrà richiamata.

Il codice di questo form è altrettanto semplice:

  1. Option Explicit
  2. Private Const MAX_FILENAME_LEN = 260
  3. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As VbAppWinStyle) As Long
  4. Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long

Sono state dichiarate due funzioni dell'API: ShellExecute come già accennato richiamerà l'applicazione predefinita per il documento specificato nell'argomento lpFile, ma esiste anche un altro argomento importante di questa funzione; si tratta di lpOperation che consente di specificare il verbo da eseguire (si raccomanda la consultazione delle Informazioni aggiuntive sulla Registrazione delle Estensioni in Windows): open è il verbo predefinito per richiedere l'apertura del documento e quindi l'avvio dell'applicazione relativa ma per molte estensioni esistono ulteriori verbi: print ad esempio avvia l'applicazione ed effettua la stampa del documento, opennew avvia la pagina web utilizzando una finestra separata e così via. Tutti i verbi sono indicati all'interno del registro di Windows e dipendono dalle singole estensioni. Gli argomenti lpParameters, lpDirectory e nShowCmd consentono rispettivamente di specificare parametri aggiuntivi nell'esecuzione del comando, di indicare la cartella da cui avviare l'applicazione e la modalità di presentazione della finestra come indicato nell'enumerazione   VbAppWinStyle.

L'altra funzione FindExecutable semplicemente ricevendo il percorso di un documento restituisce il percorso dell'applicazione dedicata all'esecuzione.

  1. Private Sub Form_Load()
  2.     txtDocumento.Text = App.Path & "\info.txt"
  3. End Sub

All'avvio della nostra applicazione la casella txtDocument conterrà il percorso del file INFO.TXT contenuto nella cartella del programma; questo solo per inizializzare i controlli e presentare il percorso di un documento sicuramente esistente.

  1. Private Sub lblCollegamento_Click()
  2.     ShellExecute Me.hwnd, "open", lblCollegamento.Caption, "", CurDir, vbMaximizedFocus
  3. End Sub

Al click sopra l'etichetta lblCollegamento sarà richiamata la funzione ShellExecute per richiedere l'apertura del browser (o più precisamente dell'applicazione dedicata alla visualizzazione degli indirizzi con protocollo http). Il verbo specificato è open, il predefinito per l'esecuzione, mentre il documento da avviare è il percorso indicato nell'etichetta stessa (http://www.vbsimple.net). L'ultimo argomento vbMaximizedFocus indicherà di mostrare la finestra in maniera ingrandita e attivata.

  1. Private Sub cmdAvvia_Click()
  2.     ShellExecute Me.hwnd, "open", txtDocumento.Text, "", CurDir, vbNormalFocus
  3. End Sub

In maniera analoga alla precedente, il click sopra il pulsante cmdAvvia avvierà l'applicazione predefinita per il documento indicato nella casella txtDocumento, sempre utilizzando il verbo open. A differenza dal caso precedente non sarà modificata la visuailzzazione della finestra ma indicando la costante vbNormalFocus sarà mostrata semplicemente la finestra senza.

  1. Private Sub cmdTrovaApplicazione_Click()
  2.     Dim strPercorso As String
  3.     strPercorso = Space$(MAX_FILENAME_LEN)
  4.     Call FindExecutable(txtDocumento.Text, vbNullChar, strPercorso)
  5.     MsgBox "L'applicazione predefinita è: " & vbNewLine & _
  6.         Left$(strPercorso, InStr(1, strPercorso, vbNullChar) - 1), _
  7.         vbInformation, "Applicazione predefinita"
  8. End Sub

L'ultimo evento è quello legato al pulsante cmdTrovaApplicazione che si occuperà di riportare il percorso dell'applicazione dedicata all'apertura del documento. Allocato il buffer (riga 21) basterà chiamare la funzione FindExecutable specificando il percorso del documento per ricevere il percorso dell'applicazione all'interno del buffer preallocato.

Sarà naturalmente necessario eliminare il carattere Null finale alla stringa di testo restituita. Il risultato ottenuto è il seguente:

Figura 2
Figura 2
Figura 3
Figura 3
Figura 4
Figura 4

Al passaggio del cursore del mouse sopra l'etichetta sarà mostrata la manina tipica dei collegamenti ipertestuali (Figura 2) ed al click verrà avviato il browser e mostrata l'home page di VBSimple; al click del pulsante Trova applicazione sarà indicato il percorso dell'applicazione dedicata all'esecuzione per l'avvio del documento specificato nella casella di testo (Figura 3); il click sul pulsante Avvia invece avvierà l'applicazione e quindi il documento indicato (Figura 4).

Alla stessa maniera può essere avviato anche il programma di posta elettronica predefinito semplicemente richiedendo l'apertura di un documento composto da mailto: e seguito dall'indirizzo di posta elettronica; questa tecnica è stata trattata nell'HowTo dedicato all'invio di un'email tramite un programma esterno.

La funzione ShellExecute si presta a tantissime operazioni, alcune delle quali già indicate, altre trattate invece in altri articoli di questa sezione.

Fibia FBI
24 Aprile 2004

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