giovedì 28 aprile 2016

Crystal Report arrotondamenti nella formula

In Crystal Report, se vogliamo arrotondare un importo, possiamo utilizare la funzione round, la quale permette di arrotondare un numero per difetto o eccesso.
Se invece vogliamo arrotondare per eccesso, dobbiamo utilizzare la funzione "CEILING" che arrotonda per eccesso.

Qui di seguito due esempi
 
 
Round(ToNumber({NomeTabella.Campo}))
CEILING(ToNumber({NomeTabella.Campo}))

martedì 26 aprile 2016

Sito di informatica guida informatica

Per la rubrica segnalazione sito, oggi vi segnalo il portale La guida informatica, raggiungibile qui http://www.laguidainformatica.it/
Un sito, in lingua italiana, dove si trovano notizie riguardante il computer, in particolare virus e software, ma anche altre tematiche sempre legate al computer.

lunedì 25 aprile 2016

.Net Rilevare il nome della scheda WIFI e verificare lo stato

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_net-rilevare-il-nome-della-scheda-wifi-e_1439.aspx

In questo articolo vedremo come rilevare il nome della scheda WiFi e verificare lo stato, ossia connesso, disconnesso o altro.
Utilizzeremo le API di Windows per gestire la periferica.

Stesura del codice

Si crea un nuovo progetto di tipo “Windows Application” utilizzando il linguaggio di programmazione di programmazione  VB.Net o C# in base alla conoscenza del lettore.
Aggiungiamo nella form un pulsante il quale visualizzerà in una casella di testo il nome della scheda e lo stato.
Passiamo in visualizzazione codice.
Aggiungiamo lo spazio dei nomi per gestire l’interoperabilità, ossia l’utilizzo delle API.


VB.Net

Imports System.Runtime.InteropServices

 

C#

using System.Runtime.InteropServices;

 





Si creano due costanti le quali saranno utilizzate nelle funzioni API per verificare se le chiamate sono andate a buon fine oppure no.
Qui di seguito il frammento di codice delle suddette operazioni.





VB.Net

Private Const WLAN_API_VERSION_2_0 As Integer = 2

    Private Const ERROR_SUCCESS As Integer = 0

 

C#

private const int WLAN_API_VERSION_2_0 = 2; 

        private const int ERROR_SUCCESS = 0;




A questo punto non ci resta che aggiungere le funzioni API di Windows, per rilevare le informazioni della scheda.
Qui di seguito i frammenti di codice per entrambi i linguaggi.



VB.Net

 

'''

    ''' Apertura alla connessione al server

    '''

    <DllImport("wlanapi.dll", SetLastError:=True)> _

    Private Shared Function WlanOpenHandle(dwClientVersion As UInt32, pReserved As IntPtr, ByRef pdwNegotiatedVersion As UInt32, ByRef phClientHandle As IntPtr) As UInt32

    End Function

 

    '''

    ''' Chiusura connessione al server

    '''

    <DllImport("wlanapi.dll", SetLastError:=True)> _

    Private Shared Function WlanCloseHandle(hClientHandle As IntPtr, pReserved As IntPtr) As UInt32

    End Function

 

    '''

    ''' Lista di tutte le interfacce Wireless

    '''

    <DllImport("wlanapi.dll", SetLastError:=True)> _

    Private Shared Function WlanEnumInterfaces(hClientHandle As IntPtr, pReserved As IntPtr, ByRef ppInterfaceList As IntPtr) As UInt32

    End Function

 

    '''

    '''

    '''

    <DllImport("wlanapi.dll", SetLastError:=True)> _

    Private Shared Sub WlanFreeMemory(pmemory As IntPtr)

    End Sub

 

    '''

    ''' 

    '''

    Public Enum WLAN_INTERFACE_STATE As Integer

        wlan_interface_state_not_ready = 0

        wlan_interface_state_connected

        wlan_interface_state_ad_hoc_network_formed

        wlan_interface_state_disconnecting

        wlan_interface_state_disconnected

        wlan_interface_state_associating

        wlan_interface_state_discovering

        wlan_interface_state_authenticating

    End Enum

 

    '''

    ''' 

    '''

    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _

    Public Structure WLAN_INTERFACE_INFO

        ''' GUID->_GUID

        Public InterfaceGuid As Guid

 

        ''' WCHAR[256]

        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _

        Public strInterfaceDescription As String

 

        ''' WLAN_INTERFACE_STATE->_WLAN_INTERFACE_STATE

        Public isState As WLAN_INTERFACE_STATE

    End Structure

    '''

    ''' 

    '''

    <StructLayout(LayoutKind.Sequential)> _

    Public Structure WLAN_INTERFACE_INFO_LIST

        Public dwNumberofItems As Int32

        Public dwIndex As Int32

        Public InterfaceInfo As WLAN_INTERFACE_INFO()

 

        Public Sub New(pList As IntPtr)

 

            dwNumberofItems = Marshal.ReadInt32(pList, 0)

 

 

            dwIndex = Marshal.ReadInt32(pList, 4)

 

 

            InterfaceInfo = New WLAN_INTERFACE_INFO(dwNumberofItems - 1) {}

 

            For i As Integer = 0 To dwNumberofItems - 1

 

                Dim pItemList As New IntPtr(pList.ToInt32() + (i * 532) + 8)

 

 

                Dim wii As New WLAN_INTERFACE_INFO()

                wii = CType(Marshal.PtrToStructure(pItemList, GetType(WLAN_INTERFACE_INFO)), WLAN_INTERFACE_INFO)

                InterfaceInfo(i) = wii

            Next

        End Sub

    End Structure

 

 

 

 

 

    Private Function getStateDescription(state As WLAN_INTERFACE_STATE) As String

        Dim stateDescription As String = String.Empty

        Select Case state

            Case WLAN_INTERFACE_STATE.wlan_interface_state_not_ready

                stateDescription = "Non presente"

                Exit Select

            Case WLAN_INTERFACE_STATE.wlan_interface_state_connected

                stateDescription = "Connesso"

                Exit Select

            Case WLAN_INTERFACE_STATE.wlan_interface_state_ad_hoc_network_formed

                stateDescription = "first node in an adhoc network"

                Exit Select

            Case WLAN_INTERFACE_STATE.wlan_interface_state_disconnecting

                stateDescription = "In fase di disconnessione"

                Exit Select

            Case WLAN_INTERFACE_STATE.wlan_interface_state_disconnected

                stateDescription = "Disconesso"

                Exit Select

            Case WLAN_INTERFACE_STATE.wlan_interface_state_associating

                stateDescription = "Associato"

                Exit Select

            Case WLAN_INTERFACE_STATE.wlan_interface_state_discovering

                stateDescription = "discovering"

                Exit Select

            Case WLAN_INTERFACE_STATE.wlan_interface_state_authenticating

                stateDescription = "Autenticazione"

                Exit Select

        End Select

 

        Return stateDescription

    End Function

 

C#

///

        /// Apertura alla connessione al server

        ///

        [DllImport("wlanapi.dll", SetLastError = true)]

        private static extern UInt32 WlanOpenHandle(UInt32 dwClientVersion,

                IntPtr pReserved, out UInt32 pdwNegotiatedVersion,

                out IntPtr phClientHandle);

 

        ///

        /// Chiusura connessione al server

        ///

        [DllImport("wlanapi.dll", SetLastError = true)]

        private static extern UInt32 WlanCloseHandle(IntPtr hClientHandle,

                                                     IntPtr pReserved);

 

        ///

        /// Lista di tutte le interfacce Wireless

        ///

        [DllImport("wlanapi.dll", SetLastError = true)]

        private static extern UInt32 WlanEnumInterfaces(IntPtr hClientHandle,

                       IntPtr pReserved, out IntPtr ppInterfaceList);

 

        ///

        ///

        ///

        [DllImport("wlanapi.dll", SetLastError = true)]

        private static extern void WlanFreeMemory(IntPtr pmemory);

 

        ///

        /// 

        ///

        public enum WLAN_INTERFACE_STATE : int

        {

            wlan_interface_state_not_ready = 0,

            wlan_interface_state_connected,

            wlan_interface_state_ad_hoc_network_formed,

            wlan_interface_state_disconnecting,

            wlan_interface_state_disconnected,

            wlan_interface_state_associating,

            wlan_interface_state_discovering,

            wlan_interface_state_authenticating

        };

 

        ///

        /// 

        ///

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]

        public struct WLAN_INTERFACE_INFO

        {

            /// GUID->_GUID

            public Guid InterfaceGuid;

 

            /// WCHAR[256]

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]

            public string strInterfaceDescription;

 

            /// WLAN_INTERFACE_STATE->_WLAN_INTERFACE_STATE

            public WLAN_INTERFACE_STATE isState;

        }

        ///

        /// 

        ///

       [StructLayout(LayoutKind.Sequential)]

        public struct WLAN_INTERFACE_INFO_LIST

        {

            public Int32 dwNumberofItems;

            public Int32 dwIndex;

            public WLAN_INTERFACE_INFO[] InterfaceInfo;

 

            public WLAN_INTERFACE_INFO_LIST(IntPtr pList)

            {

                

                dwNumberofItems = Marshal.ReadInt32(pList, 0);

 

               

                dwIndex = Marshal.ReadInt32(pList, 4);

 

                

                InterfaceInfo = new WLAN_INTERFACE_INFO[dwNumberofItems];

 

                for (int i = 0; i < dwNumberofItems; i++)

                {

                   

                    IntPtr pItemList = new IntPtr(pList.ToInt32() + (i * 532) + 8);

 

                   

                    WLAN_INTERFACE_INFO wii = new WLAN_INTERFACE_INFO();

                    wii = (WLAN_INTERFACE_INFO)Marshal.PtrToStructure(pItemList,

                        typeof(WLAN_INTERFACE_INFO));

                    InterfaceInfo[i] = wii;

                }

            }

        }

 

       

 

        //************************************************************

      

        private string getStateDescription(WLAN_INTERFACE_STATE state)

        {

            string stateDescription=string.Empty;

            switch (state)

            {

                case WLAN_INTERFACE_STATE.wlan_interface_state_not_ready:

                    stateDescription = "Non presente";

                    break;

                case WLAN_INTERFACE_STATE.wlan_interface_state_connected:

                    stateDescription = "Connesso";

                    break;

                case WLAN_INTERFACE_STATE.wlan_interface_state_ad_hoc_network_formed:

                    stateDescription = "first node in an adhoc network";

                    break;

                case WLAN_INTERFACE_STATE.wlan_interface_state_disconnecting:

                    stateDescription = "In fase di disconnessione";

                    break;

                case WLAN_INTERFACE_STATE.wlan_interface_state_disconnected:

                    stateDescription = "Disconesso";

                    break;

                case WLAN_INTERFACE_STATE.wlan_interface_state_associating:

                    stateDescription = "Associato";

                    break;

                case WLAN_INTERFACE_STATE.wlan_interface_state_discovering:

                    stateDescription = "discovering";

                    break;

                case WLAN_INTERFACE_STATE.wlan_interface_state_authenticating:

                    stateDescription = "Autenticazione";

                    break;

            }

 

            return stateDescription;

        }






Ora dobbiamo scrivere la funzione che verrà richiamata nell’evento click del pulsante e che dovrà visualizzare le informazioni della scheda tramite l’utilizzo delle API.
Qui di seguito il frammento di codice per il codice VB.Net e C#.




VB.Net

Private Sub OttieniListaWifi()

        Dim serviceVersion As UInteger = 0

        Dim handle As IntPtr = IntPtr.Zero

        If WlanOpenHandle(WLAN_API_VERSION_2_0, IntPtr.Zero, serviceVersion, handle) = ERROR_SUCCESS Then

            Dim ppInterfaceList As IntPtr = IntPtr.Zero

            Dim interfaceList As WLAN_INTERFACE_INFO_LIST

 

            If WlanEnumInterfaces(handle, IntPtr.Zero, ppInterfaceList) = ERROR_SUCCESS Then

 

                interfaceList = New WLAN_INTERFACE_INFO_LIST(ppInterfaceList)

 

 

                For i As Integer = 0 To interfaceList.dwNumberofItems - 1

                    txtLista.Text = interfaceList.InterfaceInfo(i).strInterfaceDescription + " " + getStateDescription(interfaceList.InterfaceInfo(i).isState)

                Next

 

 

                If ppInterfaceList <> IntPtr.Zero Then

                    WlanFreeMemory(ppInterfaceList)

                End If

            End If

 

            WlanCloseHandle(handle, IntPtr.Zero)

        End If

    End Sub

 

C#

private void OttieniListaWifi()

        {

            uint serviceVersion = 0;

            IntPtr handle = IntPtr.Zero;

            if(WlanOpenHandle(WLAN_API_VERSION_2_0, IntPtr.Zero,

                out serviceVersion, out handle) == ERROR_SUCCESS)

            {

                IntPtr ppInterfaceList = IntPtr.Zero;

                WLAN_INTERFACE_INFO_LIST interfaceList;

 

                if (WlanEnumInterfaces(handle, IntPtr.Zero,

                              out ppInterfaceList) == ERROR_SUCCESS)

                {

                   

                    interfaceList = new WLAN_INTERFACE_INFO_LIST(ppInterfaceList);

 

                  

                    for (int i = 0; i < interfaceList.dwNumberofItems; i++)

                        txtLista.Text = interfaceList.InterfaceInfo[i].strInterfaceDescription + " " + getStateDescription(interfaceList.InterfaceInfo[i].isState);

 

                 

                    if (ppInterfaceList != IntPtr.Zero)

                        WlanFreeMemory(ppInterfaceList);

                }

               

                WlanCloseHandle(handle, IntPtr.Zero);

            }

        }






Siamo giunti alla fine dell'articolo ora dovremmo scrivere il codice per l’evento click del pulsante che permetterà di avere informazioni sulla scheda.




VB.Net

  Private Sub BtnVisualizza_Click(sender As System.Object, e As System.EventArgs) Handles BtnVisualizza.Click

        OttieniListaWifi()

 

    End Sub

 

C#

private void BtnVisualizza_Click(object sender, EventArgs e)

        {

            OttieniListaWifi();

 

 

        }




Conclusioni

L’articolo ha voluto fornire al lettore l’utilizzo delle API per rilevare informazioni sulla scheda WiFi. Sempre più negli ultimi anni la scheda WiFi è divenuto un componente indispensabile al punto che si possono realizzare tools e programmi di sicurezza.