Archivi categoria: VB.NET

VB.NET – Creare la Fattura Elettronica in maniera Facile (Source+Library)

Oggi vi voglio mettere a disposizione il codice che potete usare in VB.NET per realizzare il file XML della Fattura Elettronica, utilizzando la libreria creata da me e messa a vostra disposizione.

Source Code
Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 CreaFileXML("C:\fatturaPA\IT01234567890.xml")
 End Sub

Private Sub CreaFileXML(Optional ByVal percorsoSaveXML As String = vbNullString)

Dim objFatturaPA As fatturaPA.fatturaPA
 objFatturaPA = New fatturaPA.fatturaPA

Dim nodoPrincipale As FatturaElettronica
 nodoPrincipale = New FatturaElettronica

Dim overview As FatturaElettronicaHeader
 overview = New FatturaElettronicaHeader

Dim DatiTrasmissione1 As DatiTrasmissione
 DatiTrasmissione1 = New DatiTrasmissione

Dim IdTrasmittente1 As IdTrasmittente
 IdTrasmittente1 = New IdTrasmittente

IdTrasmittente1.IdPaese = "IT"
 IdTrasmittente1.IdCodice = "01234567890"

DatiTrasmissione1.IdTrasmittente = IdTrasmittente1
 DatiTrasmissione1.ProgressivoInvio = "00001"
 DatiTrasmissione1.FormatoTrasmissione = "SDI11"
 DatiTrasmissione1.CodiceDestinatario = "AAAAAA"

Dim contattiTrasmittentes As ContattiTrasmittente
 contattiTrasmittentes = New ContattiTrasmittente
 'contattiTrasmittentes.Telefono = "060601"
 'contattiTrasmittentes.Email = "[email protected]"
 DatiTrasmissione1.ContattiTrasmittente = contattiTrasmittentes

'Scrivi XML

overview.DatiTrasmissione = DatiTrasmissione1

Dim cedentePrestatore As CedentePrestatore
 cedentePrestatore = New CedentePrestatore

Dim datiAnagrafici As DatiAnagrafici
 datiAnagrafici = New DatiAnagrafici

Dim idFiscaleIVA As IdFiscaleIVA
 idFiscaleIVA = New IdFiscaleIVA

idFiscaleIVA.IdPaese = "IT"
 idFiscaleIVA.IdCodice = "01234567890"

datiAnagrafici.IdFiscaleIVA = idFiscaleIVA

Dim anagrafica As Anagrafica
 anagrafica = New Anagrafica

anagrafica.Denominazione = "SOCIETA' ALPHA SRL"

datiAnagrafici.Anagrafica = anagrafica

datiAnagrafici.RegimeFiscale = "RF19"

cedentePrestatore.DatiAnagrafici = datiAnagrafici

Dim sede As Sede
 sede = New Sede

sede.Indirizzo = "VIALE ROMA 543"
 sede.CAP = "07100"
 sede.Comune = "SASSARI"
 sede.Provincia = "SS"
 sede.Nazione = "IT"

cedentePrestatore.Sede = sede

overview.CedentePrestatore = cedentePrestatore

Dim cessionarioCommittente As CessionarioCommittente
 cessionarioCommittente = New CessionarioCommittente

Dim datiAnagraficiCommittente As DatiAnagrafici
 datiAnagraficiCommittente = New DatiAnagrafici

datiAnagraficiCommittente.CodiceFiscale = "09876543210"

Dim anagraficaCommittente As Anagrafica
 anagraficaCommittente = New Anagrafica

anagraficaCommittente.Denominazione = "AMMINISTRAZIONE BETA"

datiAnagraficiCommittente.Anagrafica = anagraficaCommittente

cessionarioCommittente.DatiAnagrafici = datiAnagraficiCommittente

Dim sedeCcommittente As Sede
 sedeCcommittente = New Sede

sedeCcommittente.Indirizzo = "VIA TORINO 38-B"
 sedeCcommittente.CAP = "00145"
 sedeCcommittente.Comune = "ROMA"
 sedeCcommittente.Provincia = "RM"
 sedeCcommittente.Nazione = "IT"

cessionarioCommittente.Sede = sedeCcommittente

overview.CessionarioCommittente = cessionarioCommittente

'Scrivi XML nodo FatturaElettronicaHeader

nodoPrincipale.FatturaElettronicaHeader = overview

'
 ' FINITO LA PARTE FatturaElettronicaHeader
 '

Dim overview1 As FatturaElettronicaBody
 overview1 = New FatturaElettronicaBody

Dim datiGenerali As DatiGenerali
 datiGenerali = New DatiGenerali

Dim datiGeneraliDocumentos As DatiGeneraliDocumento
 datiGeneraliDocumentos = New DatiGeneraliDocumento
 datiGeneraliDocumentos.TipoDocumento = "TD01"
 datiGeneraliDocumentos.Divisa = "EUR"
 datiGeneraliDocumentos.Data = "2014-12-18"
 datiGeneraliDocumentos.Numero = "123"

'Aggiungiamo due Causali in una lista

datiGeneraliDocumentos.AddCausale("LA FATTURA FA RIFERIMENTO AD UNA OPERAZIONE AAAA BBBBBBBBBBBBBBBBBB CCC DDDDDDDDDDDDDDD E FFFFFFFFFFFFFFFFFFFF GGGGGGGGGG HHHHHHH II LLLLLLLLLLLLLLLLL MMM NNNNN OO PPPPPPPPPPP QQQQ RRRR SSSSSSSSSSSSSS")
 datiGeneraliDocumentos.AddCausale("SEGUE DESCRIZIONE CAUSALE NEL CASO IN CUI NON SIANO STATI SUFFICIENTI 200 CARATTERI AAAAAAAAAAA BBBBBBBBBBBBBBBBB")

datiGenerali.DatiGeneraliDocumento = datiGeneraliDocumentos

Dim datiOrdineAcquisto As DatiOrdineAcquisto
 datiOrdineAcquisto = New DatiOrdineAcquisto

'Essendo una Lista devo usare AddRiferimentoNumeroLinea
 datiOrdineAcquisto.AddRiferimentoNumeroLinea("1")

datiOrdineAcquisto.IdDocumento = "66685"
 datiOrdineAcquisto.NumItem = "1"
 datiOrdineAcquisto.CodiceCUP = "123abc"
 datiOrdineAcquisto.CodiceCIG = "456def"

'Essendo una lista devo usare AddDatiOrdineAcquisto
 datiGenerali.AddDatiOrdineAcquisto(datiOrdineAcquisto)

Dim datiContratto As DatiContratto
 datiContratto = New DatiContratto

datiContratto.RiferimentoNumeroLinea = "1"
 datiContratto.IdDocumento = "123"
 datiContratto.Data = "2012-09-01"
 datiContratto.NumItem = "5"
 datiContratto.CodiceCUP = "123abc"
 datiContratto.CodiceCIG = "456def"

'Essendo una lista devo usare AddDatiContratto
 datiGenerali.AddDatiContratto(datiContratto)

Dim datiConvenzione As DatiConvenzione
 datiConvenzione = New DatiConvenzione

datiConvenzione.RiferimentoNumeroLinea = "1"
 datiConvenzione.IdDocumento = "123"
 datiConvenzione.NumItem = "5"
 datiConvenzione.CodiceCUP = "123abc"
 datiConvenzione.CodiceCIG = "456def"

'Essendo una lista devo usare AddDatiConvenzione
 datiGenerali.AddDatiConvenzione(datiConvenzione)

Dim datiRecezione As DatiRicezione
 datiRecezione = New DatiRicezione

'Essendo una Lista devo usare AddRiferimentoNumeroLinea
 datiRecezione.AddRiferimentoNumeroLinea("1")

datiRecezione.IdDocumento = "123"
 datiRecezione.NumItem = "5"
 datiRecezione.CodiceCUP = "123abc"
 datiRecezione.CodiceCIG = "456def"

'Essendo una lista devo usare AddDatiRicezione
 datiGenerali.AddDatiRicezione(datiRecezione)

Dim DatiTrasporto As DatiTrasporto
 DatiTrasporto = New DatiTrasporto

Dim DatiAnagraficiVettore As DatiAnagraficiVettore
 DatiAnagraficiVettore = New DatiAnagraficiVettore

Dim idFiscaleIVAVettore As IdFiscaleIVA
 idFiscaleIVAVettore = New IdFiscaleIVA

idFiscaleIVAVettore.IdPaese = "IT"
 idFiscaleIVAVettore.IdCodice = "24681012141"
 DatiAnagraficiVettore.IdFiscaleIVA = idFiscaleIVAVettore

Dim anagraficaVettore As Anagrafica
 anagraficaVettore = New Anagrafica

anagraficaVettore.Denominazione = "Trasporto spa"
 DatiAnagraficiVettore.Anagrafica = anagraficaVettore

DatiTrasporto.DatiAnagraficiVettore = DatiAnagraficiVettore

DatiTrasporto.DataOraConsegna = "2012-10-22T16:46:12.000+02:00"

datiGenerali.DatiTrasporto = DatiTrasporto

'Scrivi XML

overview1.DatiGenerali = datiGenerali

Dim datiBeneServizi As DatiBeniServizi
 datiBeneServizi = New DatiBeniServizi

Dim infoDettaglioLinee1 As DettaglioLinee
 infoDettaglioLinee1 = New DettaglioLinee

infoDettaglioLinee1.NumeroLinea = "1"
 infoDettaglioLinee1.Descrizione = "LA DESCRIZIONE DELLA FORNITURA PUO' SUPERARE I CENTO CARATTERI CHE RAPPRESENTAVANO IL PRECEDENTE LIMITE DIMENSIONALE. TALE LIMITE NELLA NUOVA VERSIONE E' STATO PORTATO A MILLE CARATTERI"
 infoDettaglioLinee1.Quantita = "5.00"
 infoDettaglioLinee1.PrezzoUnitario = "1.00"
 infoDettaglioLinee1.PrezzoTotale = "5.00"
 infoDettaglioLinee1.AliquotaIVA = "22.00"

'Essendo una lista devo utilizzare AddDettaglioLinee
 datiBeneServizi.AddDetaglioLinee(infoDettaglioLinee1)

Dim datiRiepilogo As DatiRiepilogo
 datiRiepilogo = New DatiRiepilogo

datiRiepilogo.AliquotaIVA = "22.00"
 datiRiepilogo.ImponibileImporto = "5.00"
 datiRiepilogo.Imposta = "1.10"
 datiRiepilogo.EsigibilitaIVA = "I"

'Essendo una lista devo usare AddDatiRiepilogo
 datiBeneServizi.AddDatiRiepilogo(datiRiepilogo)

overview1.DatiBeniServizi = datiBeneServizi

Dim datiPagamento As DatiPagamento
 datiPagamento = New DatiPagamento

datiPagamento.CondizioniPagamento = "TP01"

Dim DettaglioPagamento As DettaglioPagamento
 DettaglioPagamento = New DettaglioPagamento

DettaglioPagamento.ModalitaPagamento = "MP01"
 DettaglioPagamento.DataScadenzaPagamento = "2015-01-30"
 DettaglioPagamento.ImportoPagamento = "6.10"

'Essendo una lista devo usare AddDettaglioPagamento
 datiPagamento.AddDettaglioPagamento(DettaglioPagamento)

'Essendo una lista devo usare AddDatiPagamento
 overview1.AddDatiPagamento(datiPagamento)

'
 ' FINITO LA PARTE FatturaElettronicaBody
 '

'Essendo una Lista FatturaElettronicaBody devo usare AddFatturaElettronicaBody
 nodoPrincipale.AddFatturaElettronicaBody(overview1)
 nodoPrincipale.versione = "1.1"

'Serve per far eseguire il metodo createFatPA()
 If (percorsoSaveXML <> vbNullString) Then
 objFatturaPA.createFatPA(nodoPrincipale, percorsoSaveXML)
 Else
 objFatturaPA.createFatPA(nodoPrincipale)
 End If
 End Sub
End Class

 

Potete qui trovare la libreria per le versioni di Framework 3.5 e 4.5 entrambi funzionano alla stessa maniera e vengono richiamate le funzioni nella stessa maniera .

Framework 3.5 : 

 

Framework 4.5 : 

 (E’ compatibile anche per VB6 e .NET)

Password : “ImaginSystem”

VB.NET – Calcolo Lettura e Estrapolazione Dati dal Codice Fiscale

Oggi vi metto a disposizione il codice sorgente di come Calcolare un Codice Fiscale e di come Leggere o Estrapolare i dati da un Codice Fiscale come la data di nascita, il comune, la provincia e parte del nome e cognome.

Il programma deve essere aggiustato graficamente, contiene tutto il sorgente e le funzioni importanti sia di Calcolo che di Lettura

Alla fine del Post troverete il link dove scaricare il file con i sorgenti del programma Calcolo del Codice Fiscale e Lettura Codice Fiscale.

Crea Codice Fiscale CF :

CreaCodiceFiscaleUtility

 

Leggi dati del Codice Fiscale CF :

LeggiCodiceFiscaleUtility

 

Potete scaricare il file d’esempio :

Password : “ImaginSystems
Link File Download: 

VB.NET – Funzione che simula la pressione dei tasti della tastiera

Calcolatrice

Oggi vi voglio parlare di come scrivere un software che preme in maniera automatica i tasti all’interno di un’applicazione già esistente, tutto grazie alla fantastica libreria System.Windows.Forms.SendKeys.SendWait() .

Durante questo articolo mi concentrerò su un esempio che ha come base la Calcolatrice di Windows ma, con poche variazioni, potrete applicarlo su qualsiasi programma voi vogliate.

Prima di iniziare dobbiamo verificare che nei riferimenti abbiamo inserito System.Windows.Forms e dobbiamo fare anche importare la libreria Imports System.Windows.Forms.

Esempio di richiamo della funzione :

EseguiCalcolatriceProgramma(1, Operazione.Somma, 2) ' 1+2=3
EseguiCalcolatriceProgramma(1, Operazione.Sottrazione, 2) '1-2=-1
EseguiCalcolatriceProgramma(1, Operazione.Moltiplicazione, 2) '1*2=2
EseguiCalcolatriceProgramma(1, Operazione.Divisione, 2) '1/2=0.5

Tabella dei comandi Simulazione dei tasti “SendKeys Representations of Common Keys

Key SendKeys Representation
BACKSPACE {BACKSPACE}, {BS}, or {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} or {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER} or ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} or {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
SHIFT +
CONTROL ^
ALT %
BACKSPACE {BACKSPACE}, {BS}, or {BKSP}

 

Imports System.Windows.Forms
Imports System.Windows.Forms.KeyEventArgs

Public Class CalcolatriceEseguiCalcoli

 Public Enum Operazione As Integer
        Somma = 0
        Sottrazione = 1
        Divisione = 2
        Moltiplicazione = 3
    End Enum

    Public Function EseguiCalcolatriceProgramma(ByVal Valore1 As Integer, ByVal ValoreOperazione As Operazione, ByVal Valore2 As Integer)
        Try
            Dim myProcesso As System.Diagnostics.Process

            myProcesso = System.Diagnostics.Process.Start("calc.exe")

            myProcesso.WaitForInputIdle(1000)
            AppActivate(myProcesso.Id)

            System.Windows.Forms.SendKeys.SendWait(Valore1)
            Select ValoreOperazione
                Case Operazione.Somma
                    System.Windows.Forms.SendKeys.SendWait("{ADD}")
                Case Operazione.Sottrazione
                    System.Windows.Forms.SendKeys.SendWait("{SUBTRACT}")
                Case Operazione.Moltiplicazione
                    System.Windows.Forms.SendKeys.SendWait("{MULTIPLY}")
                Case Operazione.Divisione
                    System.Windows.Forms.SendKeys.SendWait("{DIVIDE}")
                Case Else
                    System.Windows.Forms.SendKeys.SendWait("{ADD}")
            End Select

            System.Windows.Forms.SendKeys.SendWait(Valore2)
            System.Windows.Forms.SendKeys.SendWait("{ENTER}")
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function
End Class

VB.NET – Modificare lo sfondo del Desktop ogni ora

Oggi voglio mettere a disposizione il sorgente di un piccolo programmino che passata una cartella contenente delle immagini fa cambiare lo sfondo del desktop ogni ora grazie ad un timer. Sfruttiamo la funzione messa a disposizione da Sandro Bizioli ecco il link del suo Blogs.
Vi ricordo che alla fine del Post / Codice troverete il link dove poter scaricare i Codici Sorgenti del programma funzionante.
 SfondoDesktop
Public Class Form1
'
' Utilizzata per modificare il wallpaper di Windows
'
Private Declare Function SystemParametersInfo Lib &quot;user32&quot; Alias &quot;SystemParametersInfoA&quot; (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer
Const SPI_SETDESKWALLPAPER = 20
Const SPIF_UPDATEINIFILE = &amp;H1

Public ArrayFilter() As String = {&quot;.gif&quot;, &quot;.jpg&quot;, &quot;.png&quot;, &quot;.bmp&quot;}
Dim ElencoImgFile As New ArrayList
Dim NotifyIcon As New System.Windows.Forms.NotifyIcon

'
' Enumeratore delle impostazioni
'
Private Enum DesktopStile As Integer
Replace = 0 'Adatta alla grandezza dello schermo
Tiled = 1 'Replica/Affianca
Centred = 2 'Centrale
Streched = 4 'Estesa
None = 5
End Enum

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Percorso del file completo
'Dim FileImgPatch As String = &quot;C:\Documents and Settings\All Users\Documenti\Immagini\Immagini campione\Tramonto.jpg&quot;

'Inserisco il percorso della cartella Immagini
Dim DirImgPatch As String = &quot;C:\Documents and Settings\All Users\Documenti\Immagini\Immagini campione\&quot;

'Carico elenco di file in base al filtro di Immagini impostato precedentemente
ElencoImgFile = CaricaArrayFile(DirImgPatch)

'Carico l'oggetto ContexMenuStrip
Dim Timer As New System.Windows.Forms.Timer
AddHandler Timer.Tick, AddressOf Tmr_Tick

'Gestione del cambio immagine ogni Ora
'Timer.Interval = 60000 'Ogni 60 secondi cambia immagine il Desktop
Timer.Interval = 216000000 'Inizia contare, ogni ora cambia. (60 secondi = 60000) ( 60 minuti = 3600000)
Timer.Enabled = True 'Attivo il contatore

Me.Opacity = 0 'Per renderlo invisibile
Me.ShowInTaskbar = False 'Per non far vederlo nella barra

'Carico l'oggetto ContexMenuStrip
Dim MenuTendina As New System.Windows.Forms.ContextMenuStrip
AddHandler MenuTendina.ItemClicked, AddressOf cms_ItemClicked

'Carico in Runtime elenco del Menu a Tendina
MenuTendina.Items.Add(&quot;&amp;Info&quot;).Name = &quot;mnuInfo&quot;
MenuTendina.Items.Add(&quot;-&quot;).Name = &quot;mnuSpazio&quot;
MenuTendina.Items.Add(&quot;&amp;Chiudi&quot;).Name = &quot;mnuEsci&quot;

'Carico le icone al menu Converto una icona in un immagine .ToBitmap
MenuTendina.Items(0).Image = New Icon(Application.StartupPath &amp; &quot;\122.ico&quot;).ToBitmap 'Punta all'icona Info ?
MenuTendina.Items(2).Image = New Icon(Application.StartupPath &amp; &quot;\104.ico&quot;).ToBitmap 'Punta all'icona Chiudi X

NotifyIcon.BalloonTipIcon = ToolTipIcon.Info
NotifyIcon.BalloonTipTitle = &quot;Avviato il programma :&quot;
NotifyIcon.Text = &quot;Random Image Desktop&quot;
NotifyIcon.Icon = New Icon(System.Windows.Forms.Application.StartupPath &amp; &quot;\117.ico&quot;)
NotifyIcon.Visible = True
NotifyIcon.ContextMenuStrip = MenuTendina

End Sub

Private Sub cms_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs)
'MessageBox.Show(e.ClickedItem.Text)
'MessageBox.Show(e.ClickedItem.Name)

Select Case e.ClickedItem.Name

Case &quot;mnuInfo&quot;
MsgBox(&quot;Autore : ImaginSystems &quot; &amp; vbNewLine &amp; vbNewLine _
&amp; &quot;Funzione: Il programma cambia in maniera Random lo sfondo del Desktop&quot; &amp; vbNewLine &amp; vbNewLine _
&amp; &quot;Web: http://blogs.dotnethell.it/imaginsystems/&quot;, vbInformation, &quot;AIUTO by ImaginSystems&quot;)
Case &quot;mnuEsci&quot;
NotifyIcon.Visible = False
End
End Select
End Sub

Private Sub CambiaImg(ByVal FileImgPatch As String)

Dim img As Image = System.Drawing.Image.FromFile(FileImgPatch)
WallpaperChange(img, , DesktopStile.Streched)

End Sub

Private Function CaricaArrayFile(ByVal Dir As String) As ArrayList
Dim ArrayFile As New ArrayList
' Processa la lista dei files trovati nella directory passata
Dim fileEntries As String() = System.IO.Directory.GetFiles(Dir)
For Each fileName As String In fileEntries
For i As Integer = 0 To ArrayFilter.Length - 1
If fileName.Contains(ArrayFilter(i).ToString) Then
ArrayFile.Add(fileName)
End If
Next
Next
Return ArrayFile
End Function

Private Sub WallpaperChange(Optional ByRef myImage As Image = Nothing, Optional ByVal fileName As String = &quot;&quot;, Optional ByVal Stile As DesktopStile = DesktopStile.Replace)
'***********************************************************************************
'Func.: WallpaperChange (Mod SB-04/02/2008; Mod.: )
'Desc.: Modifica lo sfondo del desktop di Windows
'
'Par. : [myImage] Oggetto System.Drawing.Image rappresentante la nuova immagine da impostare come sfondo
' [FileName] Stringa indicante il nome del file completo di percorso dell'immagine da impostare come sfondo '
' [Stile] Integer indicante il tipo di operazione da compiere. I valori sono associati all'enum DesktopStile
'NB. : Se FileName è lasciato a blank o indica un percorso reale di un file , lo sfondo del desktop verrà rimosso.
'***********************************************************************************
Dim key As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser.OpenSubKey(&quot;Control Panel\Desktop&quot;, True)
Dim WallpaperStyle As Object = Nothing
Dim TileWallpaper As Object = Nothing

'
'
' Se ho passato solo l'immagine prima la salvo e poi punto al nuovo file
'
If fileName = &quot;&quot; And myImage IsNot Nothing Then

'
' Salvo l'immagine nella directory di windows
'
fileName = IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData, &quot;Desktop.bmp&quot;)
myImage.Save(fileName, System.Drawing.Imaging.ImageFormat.Bmp)

End If

'
' Se ho scelto l'opzione di sostituzione dello stile corrente, prima lo leggo e poi lo applico
'
If Stile = DesktopStile.Replace Then
WallpaperStyle = key.GetValue(&quot;WallpaperStyle&quot;)
TileWallpaper = key.GetValue(&quot;TileWallpaper&quot;)
End If

'
' Se ho scelto uno stile specifico lo applico
'
Select Case Stile
Case DesktopStile.Centred ' Al centro
WallpaperStyle = &quot;1&quot;
TileWallpaper = &quot;0&quot;
Case DesktopStile.Streched ' Estesa
WallpaperStyle = &quot;2&quot;
TileWallpaper = &quot;0&quot;
Case DesktopStile.Tiled 'Affiancata
WallpaperStyle = &quot;1&quot;
TileWallpaper = &quot;1&quot;
Case DesktopStile.None 'Nessuno Vuoto
fileName = &quot;&quot;
End Select
'
' Cambio lo sfondo del desktop
'
key.SetValue(&quot;WallpaperStyle&quot;, WallpaperStyle)
key.SetValue(&quot;TileWallpaper&quot;, TileWallpaper)
key.Close()

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, fileName, SPIF_UPDATEINIFILE) ' Imposta lo sfondo del desktop

End Sub

Private Sub Tmr_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim NumeroRandom As New Random
CambiaImg(ElencoImgFile(NumeroRandom.Next(0, ElencoImgFile.Count - 1)).ToString)
End Sub

End Class

Potete scaricare il file d’esempio :

Password : “ImaginSystems
Link File Download: 

VB.NET – Disabilitare o Intercettare i tasti speciali di Windows (Codice)

Oggi vi voglio mettere a disposizione una funzione che ho trovato su internet, che serve per intercettare i tasti speciali di Windows da codice VB.NET .
Blocca i tasti CTRL+ESC , ALT+TAB, ALT+F4, uccide il processo TaskMenager quando si fà CTRL + ALT + CANC .
Premetto che questo codice è rivelato dagli AntiVirus come probabile Virus e pertanto lo metto a disposizione solo per scopo informativo, quindi non mi assumo nessuna responsabilità sull’uso che ne fate.

Dovete creare un file Modulo ed inserire il seguente codice e lo salvate Keyboard.vb :

Imports System.Runtime.InteropServices
Imports System.Reflection
Imports System.Drawing
Imports System.Threading
Module Keyboard

<DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
Public Function GetModuleHandle(ByVal lpModuleName As String) As IntPtr
End Function
Public Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Integer) As Integer
Public Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" (ByVal idHook As Integer, _
ByVal lpfn As KeyboardHookDelegate, ByVal hmod As IntPtr, _
ByVal dwThreadId As Integer) As Integer
Private Declare Function GetAsyncKeyState Lib "user32" _
(ByVal vKey As Integer) As Integer
Private Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Integer, _
ByVal nCode As Integer, _
ByVal wParam As Integer, _
ByVal lParam As KBDLLHOOKSTRUCT) As Integer
Public Structure KBDLLHOOKSTRUCT
Public vkCode As Integer
Public scanCode As Integer
Public flags As Integer
Public time As Integer
Public dwExtraInfo As Integer
End Structure
' Low-Level Keyboard Constants
Private Const HC_ACTION As Integer = 0
Private Const LLKHF_EXTENDED As Integer = &H1
Private Const LLKHF_INJECTED As Integer = &H10
Private Const LLKHF_ALTDOWN As Integer = &H20
Private Const LLKHF_UP As Integer = &H80
' Virtual Keys
Public Const VK_TAB As Integer = &H9
Public Const VK_CONTROL As Integer = &H11
Public Const VK_ESCAPE As Integer = &H1B
Public Const VK_DELETE As Integer = &H2E
Private Const WH_KEYBOARD_LL As Integer = 13
Public KeyboardHandle As Integer
' Implement this function to block as many
' key combinations as you'd like
Public Function IsHooked( _
ByRef Hookstruct As KBDLLHOOKSTRUCT) As Boolean
Debug.WriteLine("Hookstruct.vkCode: " & Hookstruct.vkCode)
Debug.WriteLine(Hookstruct.vkCode = VK_ESCAPE)
Debug.WriteLine(Hookstruct.vkCode = VK_TAB)
'MessageBox.Show(Hookstruct.vkCode.ToString)
If (Hookstruct.vkCode = VK_ESCAPE) And _
CBool(GetAsyncKeyState(VK_CONTROL) _
And &H8000) Then
Call HookedState("Ctrl + Esc blocked")
Return True
End If
If (Hookstruct.vkCode = VK_TAB) And _
CBool(Hookstruct.flags And _
LLKHF_ALTDOWN) Then
Call HookedState("Alt + Tab blockd")
Return True
End If
If (Hookstruct.vkCode = VK_ESCAPE) And _
CBool(Hookstruct.flags And _
LLKHF_ALTDOWN) Then
Call HookedState("Alt + Escape blocked")
Return True
End If
'' disable PrintScreen here
If (Hookstruct.vkCode = 44) Then
Call HookedState("Print blocked")
Return True
End If
Return False
End Function
Private Sub HookedState(ByVal Text As String)
Debug.WriteLine(Text)
End Sub
Public Function KeyboardCallback(ByVal Code As Integer, _
ByVal wParam As Integer, _
ByRef lParam As KBDLLHOOKSTRUCT) As Integer
If (Code = HC_ACTION) Then
Debug.WriteLine("Calling IsHooked")
If (IsHooked(lParam)) Then
Return 1
End If
End If
Return CallNextHookEx(KeyboardHandle, _
Code, wParam, lParam)
End Function
Public Delegate Function KeyboardHookDelegate( _
ByVal Code As Integer, _
ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) _
As Integer
<MarshalAs(UnmanagedType.FunctionPtr)> _
Private callback As KeyboardHookDelegate
Public Sub HookKeyboard(ByRef f As Form)
callback = New KeyboardHookDelegate(AddressOf KeyboardCallback)
KeyboardHandle = SetWindowsHookEx(WH_KEYBOARD_LL, callback, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0)
'MessageBox.Show(KeyboardHandle.ToString)
Call CheckHooked()
End Sub
Public Sub CheckHooked()
If (Hooked()) Then
Debug.WriteLine("Keyboard hooked")
Else
Debug.WriteLine("Keyboard hook failed: " & Err.LastDllError)
End If
End Sub
Private Function Hooked() As Boolean
Hooked = KeyboardHandle <> 0
End Function
Public Sub UnhookKeyboard()
If (Hooked()) Then
Call UnhookWindowsHookEx(KeyboardHandle)
End If
End Sub
End Module

Come invocare le funzioni da un From di Windows con due bottoni , copiate il seguente codice.

Imports System.Runtime.InteropServices
Imports System.Reflection
Imports System.Drawing
Imports System.Threading
Public Class Form1
Dim MyThread As Threading.Thread

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Keyboard.HookKeyboard(Me)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Keyboard.UnhookKeyboard()
End Sub
Public Sub KillProcess(ByRef strProcessToKill As String)
Dim proc() As Process = Process.GetProcesses
For i As Integer = 0 To proc.GetUpperBound(0)
If proc(i).ProcessName = strProcessToKill Then
proc(i).Kill()
End If
Next
End Sub

Private Sub Form1_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
MyThread.Abort()
End Sub

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'Questo serve per evitare di far apparire la Task Menager quando si fà Control + Alt + Canc
MyThread = New Threading.Thread(AddressOf UccidiTakManager)
MyThread.Start()
End Sub

Private Sub UccidiTakManager()
Do While True
KillProcess("taskmgr")
Threading.Thread.Sleep(10)
Loop
End Sub
End Class