<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Code &amp; Snippet</title>
        <link>http://blogs.ugidotnet.org/AlexBlog/category/285.aspx</link>
        <description>Esempi di codice e Snippet</description>
        <language>it-IT</language>
        <copyright>Ermanno Goletto</copyright>
        <managingEditor>e.goletto@sysadmin.it</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <item>
            <title>Rilevare le istanze di SQL Server sulla rete</title>
            <link>http://blogs.ugidotnet.org/AlexBlog/archive/2008/06/16/93047.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;Ci sono vari metodi di farlo ad esempio usare &lt;a target="_blank" href="http://technet.microsoft.com/it-it/library/ms131540.aspx"&gt;SQL-DMO&lt;/a&gt; (SQL Server 2000) o meglio ancora &lt;a target="_blank" href="http://technet.microsoft.com/it-it/library/ms162169.aspx"&gt;SMO&lt;/a&gt; (SQL Server 2005). Ma questi due metodi prevedono di installare sui client le relative dll.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Un altro modo invece è quello di usare MC-SQLR ovvero il SQL Server Resolution Protocol e quindi di inviare un pacchetto &lt;br /&gt;
&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/cc219743.aspx"&gt;CLNT_BCAST_EX&lt;/a&gt; &lt;/font&gt;&lt;font face="Arial"&gt;e analizzare i pacchetti di risposta   di risposta server &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/cc219748.aspx"&gt;SVR_RESP&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Qui trovate un esempio &lt;a target="_blank" href="http://www.codeproject.com/KB/database/locate_sql_servers.aspx "&gt;Locate SQL Server instances on the local network&lt;/a&gt;, l'autore aveva analizzato il traffico di rete per capire come funzionava il protocollo ora con la pubblicazione delle specifiche dei protocolli Microsoft non è più necessario: &lt;/font&gt;&lt;font face="Arial"&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/cc219703.aspx"&gt;MC-SQLR]: SQL Server Resolution Protocol Specification&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/AlexBlog/aggbug/93047.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/AlexBlog/archive/2008/06/16/93047.aspx</guid>
            <pubDate>Mon, 16 Jun 2008 14:18:43 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/AlexBlog/archive/2008/06/16/93047.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/AlexBlog/comments/commentRss/93047.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Ricavare i path di default per i file di dati e logs in SQL Server 2005</title>
            <link>http://blogs.ugidotnet.org/AlexBlog/archive/2008/05/29/92866.aspx</link>
            <description>&lt;p&gt;Una delle impostazioni che possibile fare su un'istanza di SQL Server è quella del percorso di default in cui memorizzare file dati e logs di un nuovo database. Ho fatto diverse ricerca, ma non trovato un modo semplice per ricavare tramite T-SQL tali informazioni.&lt;/p&gt;
&lt;p&gt;A quanto sembra se si modificano tali percorsi questi vengono memorizzati nelle chiavi di registry:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;&lt;font face="Arial"&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultData&lt;/font&gt;&lt;/font&gt; &lt;/li&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\&lt;font face="Arial"&gt;DefaultLog&lt;/font&gt;&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In caso contrario i path è quello specificato durante l'installazione per i File di dati quindi si può pensare di ricavarli dai path dei file mdf e ldf del database master.&lt;/p&gt;
&lt;p&gt;Di seguito uno script T-SQL per ricavare il path di default per i file di dati:&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;USE master&lt;br /&gt;
declare @DefaultData nvarchar(512)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;--Lettura chiave di registry HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultData&lt;br /&gt;
EXEC xp_instance_regread N'HKEY_LOCAL_MACHINE',&lt;br /&gt;
 N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData',&lt;br /&gt;
 @DefaultData OUTPUT, 'no_output'&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;--Se la chiave di registry non esiste si utilizza il path del file mdf del database master&lt;br /&gt;
IF (@DefaultData IS NULL)&lt;br /&gt;
 BEGIN&lt;br /&gt;
  SELECT  @DefaultData = SUBSTRING(physical_name, 0, CHARINDEX(N'master.mdf', physical_name))&lt;br /&gt;
  FROM sys.database_files&lt;br /&gt;
  WHERE name='master'&lt;br /&gt;
 END&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;--Rimozione eventuale slash finale&lt;br /&gt;
IF ((@DefaultData IS NOT NULL) AND (CHARINDEX(N'\', @DefaultData, len(@DefaultData)) &amp;gt; 0))&lt;br /&gt;
BEGIN&lt;br /&gt;
 SELECT @DefaultData = STUFF (@DefaultData,len(@DefaultData),1,N'')&lt;br /&gt;
END&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;SELECT @DefaultData&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Mentre questo è lo script per ricavare il path di default per i file di log:&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;USE master&lt;br /&gt;
declare @DefaultLog nvarchar(512)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;--Lettura chiave di registry HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultLog&lt;br /&gt;
EXEC xp_instance_regread N'HKEY_LOCAL_MACHINE',&lt;br /&gt;
 N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog',&lt;br /&gt;
 @DefaultLog OUTPUT, 'no_output'&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;--Se la chiave di registry non esiste si utilizza il path&lt;br /&gt;
--del file mdf del database master&lt;br /&gt;
IF (@DefaultLog IS NULL)&lt;br /&gt;
 BEGIN&lt;br /&gt;
  SELECT  @DefaultLog = SUBSTRING(physical_name, 0, CHARINDEX(N'mastlog.ldf', physical_name))&lt;br /&gt;
  FROM sys.database_files&lt;br /&gt;
  WHERE name='mastlog'&lt;br /&gt;
 END&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;--Rimozione eventuale slash finale&lt;br /&gt;
IF ((@DefaultLog IS NOT NULL) AND (CHARINDEX(N'\', @DefaultLog, len(@DefaultLog)) &amp;gt; 0))&lt;br /&gt;
BEGIN&lt;br /&gt;
 SELECT @DefaultLog = STUFF (@DefaultLog,len(@DefaultLog),1,N'')&lt;br /&gt;
END&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;SELECT @DefaultLog&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Se poi occorre usare questi script in un programma .NET il mio consiglio è quello di non inserire lo script nel codice, ma di creare dei file con estensione sql in questo modo Visual Studio visualizzerà lo script evidenziando le parole chiave esattamente come in Management Studio. Quindi aggiungere il file come risorsa in questo modo VS 2005 e sucessivi creeranno una comoda prorietà stringa in My.Resources che conterrà il testo del file. In VS 2003 è possibile impostare il file come Embedded e tramite un po' di codice leggere il contenuto del file:&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;        Dim text As String = String.Empty&lt;br /&gt;
        Dim resource As System.IO.Stream = _&lt;br /&gt;
            System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream( _&lt;br /&gt;
                "&lt;em&gt;&lt;strong&gt;NameSpace.FileName&lt;/strong&gt;&lt;/em&gt;")&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;        Dim reader As New System.IO.StreamReader(resource)&lt;br /&gt;
        text = reader.ReadToEnd()&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;        reader.Close() : reader = Nothing&lt;br /&gt;
        resource.Close() : resource = Nothing&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/AlexBlog/aggbug/92866.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/AlexBlog/archive/2008/05/29/92866.aspx</guid>
            <pubDate>Thu, 29 May 2008 19:50:39 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/AlexBlog/archive/2008/05/29/92866.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/AlexBlog/comments/commentRss/92866.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Autosizing delle righe di un DataGrid</title>
            <link>http://blogs.ugidotnet.org/AlexBlog/archive/2008/05/16/92703.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;A volte mi capita di dover mettere mano a codice .NET 1.1 su Visual Studio 2003 e in questa versione la griglia nativa il DataGrid non era ricco di funzionalità. L'ultima richiesta che mi è arrivata è come realizzare l'autosizing delle righe per vedere completamente il contenuto delle righe le cui colonne vano su più righe. Manualment la cosa è possibiole quindi la funzionalità in effetti c'è ma non è esposta e quindi occorre utilizzare la reflection come indicato in questo link &lt;a target="_blank" href="http://www.syncfusion.com/FAQ/winforms/FAQ_c44c.aspx"&gt;http://www.syncfusion.com/FAQ/winforms/FAQ_c44c.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Di seguito la versione che ho realizzato:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Private Sub AutoSizeRows(ByVal columnStyle As System.Windows.Forms.DataGridColumnStyle)&lt;br /&gt;
  Dim dataGrid As System.Windows.Forms.DataGrid = columnStyle.DataGridTableStyle.DataGrid&lt;br /&gt;
  Dim dataGridtype As System.Type = dataGrid.GetType&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  Do&lt;br /&gt;
    dataGridtype = dataGridtype.BaseType&lt;br /&gt;
    If dataGridtype Is Nothing Then Exit Sub&lt;br /&gt;
  Loop Until dataGridtype.FullName = GetType(System.Windows.Forms.DataGrid).FullName&lt;br /&gt;
  &lt;br /&gt;
  While dataGridtype.FullName &amp;lt;&amp;gt; GetType(System.Windows.Forms.DataGrid).FullName&lt;br /&gt;
    dataGridtype = dataGridtype.BaseType&lt;br /&gt;
  End While&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  Dim mi As System.Reflection.MethodInfo = dataGridtype.GetMethod("get_DataGridRows", _&lt;br /&gt;
    Reflection.BindingFlags.FlattenHierarchy Or _&lt;br /&gt;
    Reflection.BindingFlags.IgnoreCase Or _&lt;br /&gt;
    Reflection.BindingFlags.Instance Or _&lt;br /&gt;
    Reflection.BindingFlags.NonPublic Or _&lt;br /&gt;
    Reflection.BindingFlags.Public Or _&lt;br /&gt;
    Reflection.BindingFlags.Static)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  Dim dataGridRows As New ArrayList&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  For Each item As Object In CType(mi.Invoke(dataGrid, Nothing), Array)&lt;br /&gt;
    If item.ToString().EndsWith("DataGridRelationshipRow") Then&lt;br /&gt;
      dataGridRows.Add(item)&lt;br /&gt;
    End If&lt;br /&gt;
  Next&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  Dim bmb As System.Windows.Forms.BindingManagerBase = _&lt;br /&gt;
    dataGrid.BindingContext(dataGrid.DataSource, dataGrid.DataMember)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  If Not bmb Is Nothing AndAlso bmb.Count &amp;gt; 0 Then&lt;br /&gt;
    Dim size As System.Drawing.SizeF&lt;br /&gt;
    Dim g As System.Drawing.Graphics = _&lt;br /&gt;
      System.Drawing.Graphics.FromHwnd(dataGrid.Handle)&lt;br /&gt;
    Dim sf As New StringFormat(StringFormat.GenericTypographic)&lt;br /&gt;
    Dim columnIndex As Integer = columnStyle.DataGridTableStyle.GridColumnStyles.IndexOf(columnStyle)&lt;br /&gt;
    Dim pi As System.Reflection.PropertyInfo&lt;br /&gt;
    Dim rowHeight As Integer&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;    For rowIndex As Integer = 0 To bmb.Count - 1&lt;br /&gt;
      size = g.MeasureString(dataGrid(rowIndex, columnIndex).ToString(), dataGrid.Font, columnStyle.Width, sf)&lt;br /&gt;
      pi = dataGridRows(rowIndex).GetType().GetProperty("Height")&lt;br /&gt;
      rowHeight = System.Convert.ToInt32(size.Height)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;      'Little extra cellpadding space &lt;br /&gt;
      rowHeight += 8&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;      pi.SetValue(dataGridRows(rowIndex), rowHeight, Nothing)&lt;br /&gt;
    Next&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;    'Rilascio risorse&lt;br /&gt;
     g.Dispose() : g = Nothing&lt;br /&gt;
     sf.Dispose() : sf = Nothing&lt;br /&gt;
&lt;/font&gt;&lt;font face="Arial"&gt;  End If&lt;br /&gt;
&lt;/font&gt;&lt;font face="Arial"&gt;End Sub&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/AlexBlog/aggbug/92703.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/AlexBlog/archive/2008/05/16/92703.aspx</guid>
            <pubDate>Fri, 16 May 2008 13:59:17 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/AlexBlog/archive/2008/05/16/92703.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/AlexBlog/comments/commentRss/92703.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Script per leggere il numero seriale del computer</title>
            <link>http://blogs.ugidotnet.org/AlexBlog/archive/2008/05/15/92682.aspx</link>
            <description>&lt;p&gt;Lo script in se non è nulla di che nel senso basta utilizzare WMI per leggere la proprietà SerialNumeber della classe &lt;font face="Arial"&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/aa394077(VS.85).aspx"&gt;Win32_BIOS&lt;/a&gt;, inrealtà lo scopo di questo script è quello di creare una template per simili esigenze ovvero:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Gestire script utilizzabili da riga di comando con possibilità di richiedere dati all'utente &lt;/li&gt;
    &lt;li&gt;Utilizzare WMI &lt;/li&gt;
    &lt;li&gt;Connettersi anche a computer remoti &lt;/li&gt;
    &lt;li&gt;Visualizzare in forma tabellare i risultati &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tutte queste esigenze di fatto sono semplicemente realizzabili se si utilizza l'oggetto &lt;font face="Arial"&gt;Microsoft.CmdLib disponibile in Windows XP e Windows 2003 Server, per maggiori informazioni si veda il seguente &lt;font face="Arial"&gt;&lt;a target="_blank" href="http://technet.microsoft.com/en-us/magazine/cc510336.aspx"&gt;Hey, Scripting Guy! Not-So-Hard Work Has Its Rewards, Too&lt;/a&gt; (purtroppo pare che su Vista non funzioni)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Per utilizzare l'oggetto occorre inserire il seguente codice nello script:&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;&lt;font face="Arial"&gt;'*** Include common module&lt;br /&gt;
Dim objCmdLib : Set objCmdLib = CreateObject( "Microsoft.CmdLib" )&lt;br /&gt;
&lt;/font&gt;&lt;font face="Arial"&gt;'*** Referring the script host to common module &lt;br /&gt;
Set objCmdLib.ScriptingHost = WScript.Application&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;Per controllare che lo script sia eseguito a riga di comando è possibile utilizzarre la funzione CheckScript:&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;&lt;font face="Arial"&gt;'*** Check whether the script is run using CScript&lt;br /&gt;
If CInt(objCmdLib.checkScript()) &amp;lt;&amp;gt; CONST_CSCRIPT Then&lt;br /&gt;
 WScript.Echo (UseCscriptErrorMessage)&lt;br /&gt;
        WScript.Quit(EXIT_UNEXPECTED)&lt;br /&gt;
End If&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;Per richiedere le credenziali all'utente da riga di comando non visualizzando la password è possibile utilizzare il seguente codice utilizzano l'oggetto &lt;font face="Arial"&gt;&lt;a target="_blank" href="http://www.microsoft.com/italy/technet/itsolutions/scriptcenter/resources/qanda/feb05/hey0204.mspx"&gt;ScriptPW&lt;/a&gt;&lt;/font&gt; disponibile in Windows XP e Windows 2003:&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;&lt;font face="Arial"&gt;'*** Require connection information to user&lt;br /&gt;
Dim strComputer, strDomain, strUser, strPassword, objPassword&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Wscript.StdOut.Write "Please enter computer name or IP Address (. for local host):"&lt;br /&gt;
strComputer = Wscript.StdIn.ReadLine&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;If strComputer &amp;lt;&amp;gt; "." Then&lt;br /&gt;
 Wscript.StdOut.Write "Please enter domain (null for log on to computer):"&lt;br /&gt;
 strDomain = Wscript.StdIn.ReadLine&lt;br /&gt;
        If strDomain = "" Then  strDomain = strComputer&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt; Wscript.StdOut.Write "Please enter your user name (null for Administrator):"&lt;br /&gt;
 strUser = Wscript.StdIn.ReadLine&lt;br /&gt;
        If strUser = "" Then strUser = "Administrator" &lt;br /&gt;
        strUser = strDomain &amp;amp; "\" &amp;amp; strUser&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt; Set objPassword = CreateObject("ScriptPW.Password")&lt;br /&gt;
 Wscript.StdOut.Write "Please enter your password:"&lt;br /&gt;
 strPassword = objPassword.GetPassword()&lt;br /&gt;
        Wscript.StdOut.WriteLine&lt;br /&gt;
End If&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Per ottenere il servizio wmi è possibile utilizzare la funzione WMIConnect:&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;&lt;font face="Arial"&gt;'*** Connection&lt;br /&gt;
Dim blnLocalConnection : blnLocalConnection = False&lt;br /&gt;
Dim objService&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;If NOT objCmdLib.wmiConnect("root\cimv2" , _&lt;br /&gt;
 strUser , strPassword , _&lt;br /&gt;
        strComputer , blnLocalConnection , _&lt;br /&gt;
        objService) Then&lt;br /&gt;
 Wscript.StdOut.WriteLine(ConnectionErrorMessage)         &lt;br /&gt;
        WScript.Quit(EXIT_METHOD_FAIL) &lt;br /&gt;
End If&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Per visualizzare i dati in forma tabellare è possibile utilizzare la funzione ShowResults:&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;&lt;font face="Arial"&gt;'*** Set Show Results Format&lt;br /&gt;
Dim arrHeader : arrHeader = Array("Element", "Value")&lt;br /&gt;
Dim arrMaxLength : arrMaxLength = Array(15, 25)&lt;br /&gt;
Dim strFormat : strFormat = "Table"&lt;br /&gt;
Dim blnPrintHeader : blnPrintHeader = True&lt;br /&gt;
Dim arrBlnHide : arrBlnHide = Array(False, False)&lt;br /&gt;
Dim arrResultsArray()&lt;br /&gt;
Dim index : index = 0&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;'*** Read info&lt;br /&gt;
Dim objQuery, objQueryItem&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;'*** Read info Computer System&lt;br /&gt;
Set objQuery = objService.ExecQuery("Select Model from Win32_ComputerSystem")&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;For Each objQueryItem in objQuery&lt;br /&gt;
  ReDim Preserve arrResultsArray(index)&lt;br /&gt;
  arrResultsArray(index) = Array("Model", objQueryItem.Model)&lt;br /&gt;
  index = index + 1&lt;br /&gt;
Next&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;'*** Read info BIOS&lt;br /&gt;
Set objQuery = objService.ExecQuery("Select SerialNumber from Win32_BIOS")&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;For Each objQueryItem in objQuery&lt;br /&gt;
  ReDim Preserve arrResultsArray(index)&lt;br /&gt;
  arrResultsArray(index) = Array("Serial Number", objQueryItem.SerialNumber)&lt;br /&gt;
  index = index + 1&lt;br /&gt;
Next&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;'*** Show System Information&lt;br /&gt;
Wscript.StdOut.WriteLine&lt;br /&gt;
objCmdLib.ShowResults arrHeader, arrResultsArray, arrMaxLength, _ &lt;br /&gt;
 strFormat, blnPrintHeader, arrBlnHide&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Per approfindimenti sulle condizioni necessarie per connettersi trmite WMI a computer remoti si veda &lt;font face="Arial"&gt;&lt;a target="_blank" href="http://www.microsoft.com/technet/scriptcenter/topics/help/wmi.mspx"&gt;WMI Isn't Working!&lt;/a&gt; mentre per imparare ad utilizzare funzionalità interessanti il mio consiglio è quello di sbirciare gli scripti già presenti nel sistema, in Windows XP  \Windows\System32.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Lo script completo è disponible al seguente &lt;a target="_blank" href="http://xoomer.alice.it/ermannogoletto/MyScripts/SysInfo.vbs"&gt;SysInfo.vbs&lt;/a&gt; (tx dx Salva oggetto se avete problemi a scaricarlo).&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/AlexBlog/aggbug/92682.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/AlexBlog/archive/2008/05/15/92682.aspx</guid>
            <pubDate>Thu, 15 May 2008 13:42:19 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/AlexBlog/archive/2008/05/15/92682.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/AlexBlog/comments/commentRss/92682.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Inviare mail tramite .NET 1.1 con Exchange 2003 e Exchange 2007</title>
            <link>http://blogs.ugidotnet.org/AlexBlog/archive/2008/04/09/92134.aspx</link>
            <description>&lt;p&gt;In questo &lt;a target="_blank" href="http://blogs.ugidotnet.org/AlexBlog/articles/92133.aspx"&gt;articolo&lt;/a&gt; ho raccolto alcune riflessioni su come inviare mail tramite .NET Framework 1.1 e 2.0 utilizzando Exchange 2003 e Exchange 2007 analizzando le differenze relative alla gestione dell'autenticazione in .NET 1.1 e 2.0 e le modifiche apportate in Exchange 2007 rispetto a Exchange 2003.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/AlexBlog/aggbug/92134.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/AlexBlog/archive/2008/04/09/92134.aspx</guid>
            <pubDate>Wed, 09 Apr 2008 10:15:04 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/AlexBlog/archive/2008/04/09/92134.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/AlexBlog/comments/commentRss/92134.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Script per comprimere un file</title>
            <link>http://blogs.ugidotnet.org/AlexBlog/archive/2008/01/31/90955.aspx</link>
            <description>&lt;p&gt;A volte in uno script amministrativo può essere necessario dover comprimere un file e in tal caso una possibilità è quella di usare le cartelle comprese presenti a partire da XP.&lt;/p&gt;
&lt;p&gt;[Update] Si tenga conto che &lt;a target="_blank" href="http://support.microsoft.com/kb/301325"&gt;Le cartelle compresse di XP hanno il limite di 4 GB&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Option Explicit&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Dim strScriptFullName, strCurrentPath, strZipFilePath, strAddFilePath&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;strScriptFullName = wscript.scriptfullname&lt;br /&gt;
strCurrentPath = Left(strscriptfullname, InStrRev(strScriptFullName, "\"))&lt;br /&gt;
strZipFilePath = strCurrentPath &amp;amp; "test.zip"&lt;br /&gt;
strAddFilePath = strCurrentPath &amp;amp; "test.txt"&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;'Crea un file zip vuoto&lt;br /&gt;
If CreateEmptyZip(strZipFilePath) Then&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  'Aggiunge un file all'archivio zip&lt;br /&gt;
  Call AddFile2Zip(strZipFilePath, strAddFilePath)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;End If&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Function CreateEmptyZip(strZipFilePath)&lt;br /&gt;
  On Error Resume Next&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  'Apertura file in scrittura&lt;br /&gt;
  Dim objFso, objFile&lt;br /&gt;
  Const ForWriting = 2&lt;br /&gt;
  Set objFso = CreateObject("Scripting.FileSystemObject")&lt;br /&gt;
  Set objFile = objFso.OpenTextFile(strZipFilePath, ForWriting, True)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  If Err = 0 Then&lt;br /&gt;
    objFile.Write Chr(80) &amp;amp; Chr(75) &amp;amp; Chr(5) &amp;amp; Chr(6) &amp;amp; String(18, 0)&lt;br /&gt;
  End If&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  If Err = 0 Then&lt;br /&gt;
    objFile.Close&lt;br /&gt;
  End If&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  Set objFso = Nothing&lt;br /&gt;
  Set objFile = Nothing  &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  If Err = 0 Then&lt;br /&gt;
    CreateEmptyZip=True&lt;br /&gt;
  Else&lt;br /&gt;
    Err.Clear&lt;br /&gt;
    CreateEmptyZip=False&lt;br /&gt;
  End If&lt;br /&gt;
End Function &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Function AddFile2Zip(strZipFilePath, strAddFilePath)&lt;br /&gt;
  'On Error Resume Next&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  Dim objApp, objFolder&lt;br /&gt;
  Set objApp = createobject("Shell.Application")&lt;br /&gt;
  Set objFolder = objApp.NameSpace(strZipFilePath)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  If Err = 0 Then&lt;br /&gt;
    Call objFolder.CopyHere(strAddFilePath)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;    'Le opzioni di CopyHere sembrano non avere effetto&lt;br /&gt;
    'per operazioni su cartelle compresse&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;    'Pausa per consentire l'avvio del processo di compressione&lt;br /&gt;
    'in quanto il processo verrà avviato quando quando il&lt;br /&gt;
    'processo dello script verrà messo in idle se il&lt;br /&gt;
    'processo dello script termina prima il processo&lt;br /&gt;
    'di compressione non viene avviato.&lt;br /&gt;
    'Ciò accade perchè CopyHere è asincrona&lt;br /&gt;
     wscript.Sleep 500&lt;br /&gt;
  End If&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  Set objFolder = Nothing&lt;br /&gt;
  Set objApp = Nothing&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;  If Err = 0 Then&lt;br /&gt;
    AddFile2Zip = True&lt;br /&gt;
  Else&lt;br /&gt;
    Err.Clear&lt;br /&gt;
    AddFile2Zip = False&lt;br /&gt;
  End If&lt;br /&gt;
End Function&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/AlexBlog/aggbug/90955.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/AlexBlog/archive/2008/01/31/90955.aspx</guid>
            <pubDate>Thu, 31 Jan 2008 14:11:14 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/AlexBlog/archive/2008/01/31/90955.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/AlexBlog/comments/commentRss/90955.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Section VirtualEarth per MWPSK (My Web Pages Start Kit)</title>
            <link>http://blogs.ugidotnet.org/AlexBlog/archive/2007/09/13/88313.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;Mi sono cimentato nella realizzazione di una Sezione per MWPSK che mi permettesse di realizzare la funzionalità "Dove &lt;/font&gt;&lt;font face="Arial"&gt;siamo"/"Where we are" presente nella maggior parte siti in modo più dinamico tramite una mappa di Virtual Earth.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;La scelta è caduta su una Section perchè rispetto agli Easy Control permettono di avere dei dati di configurazione che &lt;/font&gt;&lt;font face="Arial"&gt;possono essere poi salvati anche se l'implementazione di una Section è maggiormente complessa rispetto a quella di un Easy &lt;/font&gt;&lt;font face="Arial"&gt;Control. In questo modo però è posiibile dare all'utente la possibilità di configurare la mappa consentendo la possibiltà di &lt;/font&gt;&lt;font face="Arial"&gt;inserire latitudine e longitudine del centro mappa, di definire l'altezza della sezione e opzionalmente di definire zoom, &lt;/font&gt;&lt;font face="Arial"&gt;rendere fissa la mappa, inserire un Pushpin, impostare la metrica e visualizzare la MiniMap.&lt;br /&gt;
Inoltre in questo modo sarà possibile inserire più mappe nel sito e ciò può tornare utile nel caso ad esempio di piccole &lt;/font&gt;&lt;font face="Arial"&gt;attività commerciale con più punti vendita.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Gli Easy Control sono da intersi invece come funzionatà generali senza necessità di configurazione o di persistenza di dati o come &lt;/font&gt;&lt;font face="Arial"&gt;funzionalità specifiche del sito, il vantaggio è che la loro implementazione è meno complessa.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Per approfondire le linee guida per implementare Section e Easy Control si faccia riferimento ai seguenti link:&lt;br /&gt;
http://www.codeplex.com/MyWebPagesStarterKit/Project/FileDownload.aspx?DownloadId=6942&lt;br /&gt;
http://www.codeplex.com/MyWebPagesStarterKit/Project/FileDownload.aspx?DownloadId=15508&lt;br /&gt;
http://www.codeplex.com/MyWebPagesStarterKit/Wiki/View.aspx?title=Additional%20components%20and%20examples&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Implementare una Section VirtualEarth significa di fatto realizzare un controllo che erediata dalla classe del MWPSK &lt;/font&gt;&lt;font face="Arial"&gt;MyWebPagesStarterKit.Controls.SectionControlBaseClass la quale a sua volta eredita da System.Web.UI.UserControl e scrivere &lt;/font&gt;&lt;font face="Arial"&gt;una classe che si occuperà gestire i dati di configurazione ereditata dalla classe MyWebPagesStarterKit.Section.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Per inserire una mappa Virtual Earth all'interno di uno UserControl occorre:&lt;/font&gt;&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;Aggiungere un div nello UserControl all'interno del quale verrà visualizzata la mappa.&lt;br /&gt;
    Per poter modificare l'altezza della mappa il div sarà a sua volta contenuto all'interno di un panel:&lt;br /&gt;
    &amp;lt;asp:View ID="readonlyView" runat="server"&amp;gt;&lt;br /&gt;
       &amp;lt;asp:Panel ID="panReadonly" runat="server" Height="300px" Width="100%"&amp;gt;&lt;br /&gt;
          &amp;lt;div style="position: relative; width: 100%; height: 100%" id="divMap"&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
       &amp;lt;/asp:Panel&amp;gt;&lt;br /&gt;
    &amp;lt;/asp:View&amp;gt;&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;Aggiungere il meta &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&amp;gt; nel tag head.&lt;br /&gt;
    Ciò consente la corretta visualizzazione di tutte le mappe, ad esempio, nel caso di una mappa del Giappone i caratteri &lt;/font&gt;&lt;font face="Arial"&gt;giapponesi sarranno visualizati correttamente.&lt;br /&gt;
    Per aggiungere il tag è possibile utilizzare le seguenti istruzioni:&lt;br /&gt;
    System.Web.UI.HtmlControls.HtmlMeta meta = new System.Web.UI.HtmlControls.HtmlMeta();&lt;br /&gt;
    meta.HttpEquiv = "Content-Type";&lt;br /&gt;
    meta.Content = "text/html; charset=utf-8";&lt;br /&gt;
    this.Page.Header.Controls.Add(meta);&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;Aggiungere il tag script per l'inclusione delle Api di Virtual Earth:&lt;br /&gt;
    &amp;lt;script src="http://dev.virtualearth.net/mapcontrol/v5/mapcontrol.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    Per aggiungere il tag script include è possibile utilizzare le seguenti istruzioni:&lt;br /&gt;
    if (!this.Page.ClientScript.IsClientScriptIncludeRegistered(this.GetType(),"mapcontrol"))&lt;br /&gt;
      {&lt;br /&gt;
        this.Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "mapcontrol", &lt;br /&gt;
          "http://dev.virtualearth.net/mapcontrol/v5/mapcontrol.js");&lt;br /&gt;
      }&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;Costruire lo script block contenente la funzione LoadMap che richiama la funzione javascript BuildMap contenuta nel file ascx &lt;/font&gt;&lt;font face="Arial"&gt;dello UserControl con i paramentri impostati in sede di configurazione per il redering della mappa all'interno del div.&lt;br /&gt;
    Per aggiungere lo script block è possibile utilizzare le seguenti istruzioni:&lt;br /&gt;
    if (!this.Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "loadmap"))&lt;br /&gt;
      {&lt;br /&gt;
        this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "loadmap",&lt;br /&gt;
          "function LoadMap()\n" +&lt;br /&gt;
          "{\n" +&lt;br /&gt;
          string.Format("BuildMap({0},{1},{2},'{3}',{4},{5},'{6}','{7}');\n",&lt;br /&gt;
            this._section.Latitude,&lt;br /&gt;
            this._section.Longitude,&lt;br /&gt;
            this._section.Zoom,&lt;br /&gt;
            this._section.Unit,&lt;br /&gt;
            this._section.Fixed.ToString().ToLower(),&lt;br /&gt;
            this._section.ShowMiniMap.ToString().ToLower(),&lt;br /&gt;
            this._section.PushpinTitle,&lt;br /&gt;
            this._section.PushpinDescription) +&lt;br /&gt;
            "}",&lt;br /&gt;
          true);&lt;br /&gt;
      }&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;Invocare la funzione javascript LoadMap nell'evento onload del body.&lt;br /&gt;
    Occorre chiamare il metodo LoadMap dopo aver completato il caricamento della pagina poiché il caricamento della mappa va a &lt;/font&gt;&lt;font face="Arial"&gt;modificare il DOM e può causare errori nel browser (in particolare con IE7) se le modifiche avvengono prima che tutto il DOM &lt;/font&gt;&lt;font face="Arial"&gt;sia stato caricato.&lt;br /&gt;
    Per aggiungere lo startup script è possibile utilizzare le seguenti istruzioni:&lt;br /&gt;
    if (!this.Page.ClientScript.IsStartupScriptRegistered(this.GetType(), "onload"))&lt;br /&gt;
      {&lt;br /&gt;
        this.Page.ClientScript.RegisterStartupScript(this.GetType(), "onload",&lt;br /&gt;
          "AddOnloadEvent(LoadMap);",&lt;br /&gt;
          true);&lt;br /&gt;
      }&lt;br /&gt;
    La funzione javascript AddOnloadEvent si occupa di aggiungere un event handler all'evento onload del body della pagina che &lt;/font&gt;&lt;font face="Arial"&gt;ospita lo UserControl ed è contenuta nel file ascx dello stesso:&lt;br /&gt;
    function AddOnloadEvent(fnc)&lt;br /&gt;
    {&lt;br /&gt;
      if ( typeof window.addEventListener != "undefined" )&lt;br /&gt;
        // Mozilla&lt;br /&gt;
        window.addEventListener( "load", fnc, false );&lt;br /&gt;
      else if ( typeof window.attachEvent != "undefined" ) {&lt;br /&gt;
        // IE&lt;br /&gt;
        window.attachEvent( "onload", fnc );&lt;br /&gt;
      }&lt;br /&gt;
      else {&lt;br /&gt;
        // Others&lt;br /&gt;
        if ( window.onload != null ) {&lt;br /&gt;
          var oldOnload = window.onload;&lt;br /&gt;
          window.onload = function ( e ) {&lt;br /&gt;
            oldOnload( e );&lt;br /&gt;
            window[fnc]();&lt;br /&gt;
          };&lt;br /&gt;
        }&lt;br /&gt;
        else &lt;br /&gt;
          window.onload = fnc;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;font face="Arial"&gt;La Section è disponibile per il download al seguente link:&lt;br /&gt;
http://www.codeplex.com/MyWebPagesStarterKit/WorkItem/View.aspx?WorkItemId=12747&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Ovviamente può ancora essere migliorata in quanto al momento non è localizzata, ma l'interfaccia di configurazione è solo in &lt;/font&gt;&lt;font face="Arial"&gt;lingua inglese e non ho scritto l'help ma ho solo gestito il link ad una sezione #virtualearth-content nel file &lt;/font&gt;&lt;font face="Arial"&gt;quick_guide.html.&lt;br /&gt;
Un'estensione interessante potrebbe essere quella di poter aggiungere più pushpin sulla mappa.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/AlexBlog/aggbug/88313.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/AlexBlog/archive/2007/09/13/88313.aspx</guid>
            <pubDate>Wed, 12 Sep 2007 22:12:42 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/AlexBlog/archive/2007/09/13/88313.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/AlexBlog/comments/commentRss/88313.aspx</wfw:commentRss>
        </item>
        <item>
            <title>String.Format e i valori Boolean</title>
            <link>http://blogs.ugidotnet.org/AlexBlog/archive/2007/08/20/87872.aspx</link>
            <description>&lt;p&gt;Leggendo questo &lt;a target="_blank" href="http://blogs.ugidotnet.org/corrado/archive/2003/08/20/779.aspx"&gt;post&lt;/a&gt; di Corrado mi è venuto in mente un modo per formattare i valori booleani partendo dal fatto che CInt(True ) è -1 e CInt(False) è 0:&lt;br /&gt;
&lt;strong&gt;String.Format("Il valore è &lt;font face="Arial"&gt;{0:Falso;Vero}.",CInt(booleanValue))&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/AlexBlog/aggbug/87872.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/AlexBlog/archive/2007/08/20/87872.aspx</guid>
            <pubDate>Sun, 19 Aug 2007 23:44:03 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/AlexBlog/archive/2007/08/20/87872.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/AlexBlog/comments/commentRss/87872.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Preview di uno Screensaver in  un oggetto container</title>
            <link>http://blogs.ugidotnet.org/AlexBlog/archive/2007/08/08/87583.aspx</link>
            <description>&lt;P&gt;Per fare il preview di uno Screensaver in un oggetto container &amp;#232; possibile utilizzare il parametro /p dello stesso. Di seguito il codice per visualizzare uno Screensaver in una PictureBox:&lt;/P&gt;
&lt;P&gt;Private Const ScreenSaverName As String = "ssbezier.scr"&lt;BR&gt;Private screenSaverProcess As System.Diagnostics.Process&lt;/P&gt;
&lt;P&gt;Dim startInfo As New System.Diagnostics.ProcessStartInfo&lt;BR&gt;startInfo.Arguments = "/p " &amp;amp; Me.PictureBox1.Handle.ToString()&lt;BR&gt;startInfo.FileName = ScreenSaverName&lt;BR&gt;startInfo.UseShellExecute = False&lt;BR&gt;screenSaverProcess = System.Diagnostics.Process.Start(startInfo)&lt;/P&gt;
&lt;P&gt;Per arrestare la visualizzazione dello Screensaver baster&amp;#224; terminare il processo:&lt;BR&gt;screenSaverProcess.Kill()&lt;BR&gt;screenSaverProcess.Close()&lt;BR&gt;screenSaverProcess.Dispose()&lt;/P&gt;&lt;img src="http://blogs.ugidotnet.org/AlexBlog/aggbug/87583.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/AlexBlog/archive/2007/08/08/87583.aspx</guid>
            <pubDate>Wed, 08 Aug 2007 19:18:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/AlexBlog/archive/2007/08/08/87583.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/AlexBlog/comments/commentRss/87583.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Ricavare la porta di una stampante</title>
            <link>http://blogs.ugidotnet.org/AlexBlog/archive/2007/02/21/71336.aspx</link>
            <description>&lt;P&gt;Per ricavare la porta di una stampante in VS 2003&amp;nbsp;&amp;#232; possibile utilizzare WMI e in particolare la classe &lt;A href="http://msdn2.microsoft.com/en-us/aa394363.aspx"&gt;Win32_Printer&lt;/A&gt;&amp;nbsp;:&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Shared&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Function&lt;/FONT&gt;&lt;FONT size=2&gt; GetPrinterPortName(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ByVal&lt;/FONT&gt;&lt;FONT size=2&gt; printerName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;FONT size=2&gt;) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; portName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;FONT size=2&gt; = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;FONT size=2&gt;.Empty&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; path &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;FONT size=2&gt; = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;FONT size=2&gt;.Format("Win32_Printer.DeviceID='{0}'", printerName)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim&lt;/FONT&gt;&lt;FONT size=2&gt; p &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;New&lt;/FONT&gt;&lt;FONT size=2&gt; System.Management.ManagementObject(path)&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;p.Get()&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;portName = p("PortName").ToString()&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;p.Dispose() : p = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Nothing&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return&lt;/FONT&gt;&lt;FONT size=2&gt; portName&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;End&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Function&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Per utilizzare il codice occcore aggiungere un reference a System.Management.&lt;/P&gt;
&lt;P&gt;In&amp;nbsp;VS 2005 non ho trovato funzionalit&amp;#224; native per ricavare la porta della stampante anche&amp;nbsp;se inizialmente era previsto un My.Computer.Printers come si pu&amp;#242;&amp;nbsp;leggere&amp;nbsp;nel seguente articolo &lt;A href="http://msdn.microsoft.com/msdnmag/issues/04/05/VisualBasic2005/"&gt;http://msdn.microsoft.com/msdnmag/issues/04/05/VisualBasic2005/&lt;/A&gt;&amp;nbsp;ma nella versione definitiva pare non sia poi stato implementato chiss&amp;#224; se conteneva una funzionalit&amp;#224; per ricavare le porte delle stampati?&lt;/P&gt;&lt;img src="http://blogs.ugidotnet.org/AlexBlog/aggbug/71336.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/AlexBlog/archive/2007/02/21/71336.aspx</guid>
            <pubDate>Wed, 21 Feb 2007 15:44:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/AlexBlog/archive/2007/02/21/71336.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/AlexBlog/comments/commentRss/71336.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>