Hey, Scripting Guy!Gli alberi sono in fiore... e compaiono ovunque nuove finestre. È arrivata la primavera.

Gli Scripting Guys di Microsoft

Ah, è arrivata la primavera. Era ora! Dopo un inverno che ha registrato piogge da record, grandinate, tempeste di vento e neve, una delle quali ha provocato la caduta di un albero nel giardino di uno Scripting Guy, mancando di poco la casa e facendo scappare il cane dietro al divano, finalmente è arrivata la primavera e ci stiamo godendo una fresca pioggerellina prima che inizi il periodo delle calde piogge estive.

Fuori sta piovigginando, quindi potrebbe essere l'occasione buona per avventurarci tra i nostri script ed esaminare le applicazioni HTML (HTA). E quando diciamo "avventurarci", è proprio quello che intendiamo. Non forniremo alcun tipo di introduzione, ma partiremo dal presupposto che chi legge sappia già come creare una HTA. In caso contrario, si consiglia di consultare la sezione Script Center dell'HTA Developers Center. In particolare, si consiglia di leggere i due articoli inclusi nella sezione HTA per principianti. Successivamente, potremo riprendere da questo punto.

In questo articolo verranno illustrate le procedure per creare finestre di dialogo e per passare le informazioni tra la HTA principale e la finestra di dialogo. Eh sì, l'aria fresca di primavera ci ha reso piuttosto ambiziosi... Meglio approfittarne finché dura.

Probabilmente si saprà già che una finestra di dialogo può essere di due tipi: modale e non modale. La differenza consiste nel fatto che quando viene aperta una finestra di dialogo modale, non è più possibile tornare alla finestra principale finché la finestra modale non viene chiusa. Quando viene aperta una finestra di dialogo non modale, al contrario, è possibile passare da una finestra all'altra. Tuttavia, se si chiude la finestra principale, verrà chiusa anche quella non modale.

La procedura per creare entrambi i tipi di finestre di dialogo è identica. L'unica differenza è che per creare una finestra di dialogo modale viene chiamata la funzione ShowModalDialog, mentre per creare una finestra non modale viene chiamata la funzione ShowModelessDialog. Entrambe le funzioni accettano gli stessi parametri. Si consideri, ad esempio, una HTA semplice che consente di aprire una finestra di dialogo modale (vedere la Figura 1).

Figure 1 Finestra di dialogo iniziale semplice

<html> 
<head> 
<title>Modal Example</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”MainModal”>
</head>

<script language=”VBScript”> 
Sub ShowDialog 
 intReturn = _
    ShowModalDialog(“modaldialog.hta”) 
 textbox.Value = intReturn
End Sub
</script> 

<body> 
<button onclick=”ShowDialog”>
 Show Dialog Box</button> <p>
<input type=”text” name=”textbox”>
</body> 
</html>

Questa HTA è stata denominata Modal Example. Nell'area <body> della HTA sono stati aggiunti due elementi: un pulsante denominato Show Dialog Box e una casella di testo denominata textbox, come illustrato nella Figura 2. Se si seleziona il pulsante, verrà eseguita la subroutine ShowDialog.

Figura 2 Finestra di dialogo modale della HTA

Figura 2** Finestra di dialogo modale della HTA **

La subroutine ShowDialog è abbastanza semplice. Viene chiamata la funzione ShowModalDialog, che inoltra come parametro il nome del file HTA da visualizzare come finestra di dialogo modale, in questo caso modaldialog.hta. Si presuppone che il file modaldialog.hta si trovi nella stessa cartella della HTA. In caso contrario, sarà necessario includere il percorso completo del file.

Successivamente, viene restituito un valore (intReturn) da ShowModalDialog che viene visualizzato nella casella di testo. Di seguito verrà descritto il modo in cui si ottiene tale valore. È importante notare che la chiamata a ShowModalDialog non restituirà alcun valore finché la finestra di dialogo modale non verrà chiusa. Ciò significa che, finché non verrà eseguita questa operazione, il valore restituito non verrà assegnato alla casella di testo.

Esaminiamo ora il file modaldialog.hta, ovvero la finestra di dialogo aperta dalla chiamata HTA (vedere la Figura 3). In questa HTA, sono stati creati due elementi: una casella di riepilogo denominata listbox e un pulsante denominato OK, come illustrato nella Figura 4. Alla casella di riepilogo sono stati aggiunti quattro elementi denominati Option 1, Option 2 e così via, a ciascuno dei quali sono stati assegnati i valori corrispondenti, da 1 a 4. Selezionando il pulsante OK, viene eseguita la subroutine CloseWindow.

Figure 3 modaldialog.hta

<html> 
<head> 
<title>Modal Dialog Box</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”ModalDialog”>
</head>

<script language=”VBScript”> 
Sub CloseWindow
  window.returnValue = listbox.Value
  window.Close 
End Sub
</script> 

<body> 
<select size=”3” name=”listbox”>
 <option value=”1”>Option 1</option>
 <option value=”2”>Option 2</option>
 <option value=”3”>Option 3</option>
 <option value=”4”>Option 4</option>
</select>
<p>
<input type=”button” id=”idBtn” value=”OK” onclick=”CloseWindow”> 
</body> 
</html>

Figura 4 HTA relativa alla finestra di dialogo modale

Figura 4** HTA relativa alla finestra di dialogo modale **

La subroutine CloseWindow è abbastanza semplice. Innanzitutto, è necessario leggere il valore dell'elemento selezionato nella casella di riepilogo e assegnarlo alla proprietà window.returnValue. Ad esempio, se l'utente sceglie Option 2, viene assegnato il valore 2 a window.returnValue, quindi viene chiamato il metodo window.Close per chiudere la finestra di dialogo.

A questo punto, il controllo ritorna alla HTA principale. Si tenga presente la chiamata a ShowModalDialog:

intReturn = _
  ShowModalDialog(“modaldialog.hta”) 

Il valore restituito assegnato a intReturn corrisponde al valore assegnato a window.returnValue nella HTA della finestra di dialogo. Pertanto, se si sceglie Option 2 nella finestra di dialogo, assegnando il valore 2 a window.returnValue, il valore di intReturn sarà pari a 2 e la seguente riga di codice visualizzerà tale valore nella casella di testo:

textbox.Value = intReturn

Dopo aver esaminato come ottenere un valore da una finestra di dialogo, verrà illustrata la procedura da utilizzare per passare il valore alla finestra di dialogo. Sebbene la procedura sia identica per entrambe le finestre, in questo esempio verrà utilizzata una finestra non modale (vedere la Figura 5).

Figure 5 Passaggio a una finestra non modale

<html>
<head>
<title>Modeless Example</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”ModelessMain”>
</head>

<script language=”VBScript”>
Sub ShowDialog
  intReturn = _
    window.ShowModelessDialog _
    (“modelessdialog.hta”, _
    lstServers.Value, _
    “dialogHeight:400px;dialogWidth:300px”)
End Sub
</script>

<body>
<select size=”1” name=”lstServers”>
 <option value=”server1”>Server1</option>
 <option value=”server2”>Server2</option>
 <option value=”server3”>Server3</option>
 <option value=”server4”>Server4</option>
</select>
<p>
<input type=”button” value=”Retrieve Processes” onclick=”ShowDialog”>
</body>
</html>

Figura 7 Dati inoltrati alla finestra di dialogo non modale

Figura 7** Dati inoltrati alla finestra di dialogo non modale **

Questa volta è stata creata una casella di riepilogo a discesa denominata lstServers (il fatto che sia a discesa può essere dedotto dalla dimensione pari a 1). Inoltre, è stato creato un pulsante denominato Retrieve Processes. Selezionando questo pulsante, viene eseguita la subroutine ShowDialog. La subroutine ShowDialog è costituita da un'unica riga, ovvero la chiamata alla funzione window.ShowModelessDialog, come illustrato di seguito:

intReturn = _
  window.ShowModelessDialog _
  (“modelessdialog.hta”, _
  lstServers.Value, _
  “dialogHeight:400px;dialogWidth:300px”)

Il primo parametro che viene inoltrato a questa funzione è il nome della HTA da eseguire nella finestra di dialogo, in questo caso modelessdialog.hta. Il secondo parametro è la proprietà Value della casella di riepilogo. Si tenga presente che la proprietà Value contiene il valore dell'opzione scelta nella casella di riepilogo. Pertanto, se l'utente sceglie Server2 dalla casella di riepilogo, la proprietà Value sarà server2. Questo parametro indica la modalità con cui vengono inoltrate le informazioni alla finestra di dialogo. È possibile inoltrare più valori inserendoli nel parametro sotto forma di array o raccolta.

Di seguito verrà illustrato in che modo viene ricevuto il valore del parametro nella finestra di dialogo. Tuttavia, è necessario prima segnalare che è stato introdotto un terzo parametro:

“dialogHeight:400px;dialogWidth:300px”

Questo parametro contiene una stringa che specifica l'altezza e la larghezza da impostare per la finestra di dialogo. In questo caso, sono state specificate un'altezza di 400 pixel (400 px) e una larghezza di 300 pixel. Come illustrato nell'esempio della finestra modale, è possibile lasciare vuoto il parametro e la finestra di dialogo verrà visualizzata in base alla dimensione predefinita impostata nel computer.

Esaminiamo ora il file modelessdialog.hta (Figura 6) e il modo in cui viene letto il valore passato alla finestra di dialogo.

Figure 6 modelessdialog.hta

<html>
<head>
<title>Modeless Dialog</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”Processes”>
</head>

<script language=”VBScript”>
Sub window_onLoad
  strComputer = window.dialogArguments
  Set objWMIService = GetObject(“winmgmts:” _
    & “{impersonationLevel=impersonate}!\\” _
    & strComputer & “\root\cimv2”)
  Set colProcesses = objWMIService.ExecQuery   _
    (“Select * from Win32_Process”)

  strHTML = “<h1>” & strComputer & “</h1><p>”
  For Each objProcess in colProcesses
    strHTML = strHTML & objProcess.Name & _
       “<br>”
  Next

  DataArea.InnerHTML = strHTML
End Sub
</script>

<body>
<span id=”DataArea”></span>
</body>
</html>

In questa HTA, l'unico elemento che viene specificato è una sezione contenente l'area completa della finestra di dialogo. Nello script è stata definita la subroutine window_onLoad. Questa subroutine verrà eseguita non appena viene aperta la HTA (in questo caso, dalla chiamata a ShowModelessDialog). Di seguito è riportata la prima riga della subroutine:

strComputer = window.dialogArguments

Viene assegnato alla variabile strComputer il contenuto della proprietà window.dialogArguments ovvero il valore inoltrato al secondo parametro della chiamata a ShowModelessDialog. Se nella finestra principale è stato scelto Server2, la variabile strComputer conterrà il valore server2.

La parte restante della subroutine consente semplicemente di recuperare tutti i processi dalla variabile strComputer e di visualizzarli nell'area della sezione. I risultati di questa operazione sono illustrati nella Figura 7.

A questo punto, si avrà a disposizione tutta l'estate per giocare con le finestre di dialogo HTA. A meno che non si viva nell'Emisfero meridionale, nel qual caso, con l'inverno che avanza, si potrebbe avere qualche difficoltà se si verificano tante interruzioni di corrente come quelle che abbiamo avuto noi durante l'inverno.

Gli Scripting Guys di Microsoft lavorano o, per meglio dire, sono stipendiati da Microsoft. Quando non si dedicano al baseball (o a varie altre attività) da giocatori, allenatori o semplici spettatori gestiscono il TechNet Script Center. Consultare la pagina www.scriptingguys.com.

© 2008 Microsoft Corporation e CMP Media, LLC. Tutti i diritti riservati. È vietata la riproduzione completa o parziale senza autorizzazione.