Proteggiamoci da occhi indiscreti
a cura di Michele Neri (requisiti: conoscenza generica di Visual Basic)L'evolversi di Visual Basic, dalla versione 3 ad oggi, con l'imminente uscita della 7, ci permette di avere degli strumenti standard che teoricamente ci consentirebbero di realizzare qualsiasi cosa. Tuttavia a volte è necessario utilizzare funzionalità tipiche di un linguaggio che operi a livello di sistema: es. C++. Per ovviare a queste differenze Microsoft ha messo a disposizione dei programmatori Visual Basic le API. Le API (Application Program Interface) sono un insieme di funzioni, messaggi, strutture, tipi e istruzioni utilmente accessibili da VB qualora sia necessario l'impiego di funzionalità tipiche di un linguaggio a basso livello come il C++.
Questa brevissima premessa mi è sembrata opportuna poiché nell'esempio di programmazione di quest'articolo, sfrutteremo le Api. Realizzeremo un programma che protegga il lavoro presente nel nostro computer da occhi indiscreti, permettendoci di bloccare il mouse all'interno di un form, nascondere le icone del desktop, la barra delle applicazioni e bloccare la tastiera.
Procediamo per passi: prima di tutto disegniamo un form di piccole dimensioni (Width=5820 Top = 3825) assegnandogli la proprietà BorderStyle = None. Posizioniamo due caselle di testo e le chiamiamo ProtTxt e LibTxt (impostando la proprietà PasswordChar = *) e infine inseriamo tre pulsanti (CmdProt- CmdLib - Esci).
A questo punto incominciamo a scrivere del codice. Dichiariamo la prima variabileOption Explicit Dim password As StringNella routine che gestisce l'evento Load del form scriviamo il codice che lasci visibile la casella di testo per inserire la password di blocco e nasconda quella di sblocco, inoltre rendiamo attivo di default il pulsante CmdProt .
Private Sub Form_Load() LibTxt.Visible = False ProtTxt.Visible = True CmdProt.Default = True End subSuccessivamente associamo al pulsante CmdProt il seguente codice che ci permetterà, previo l'inserimento di una password, di bloccare il mouse, disabilitare la tastiera e nascondere la barra delle applicazioni e le icone del desktop.
Nel codice sono riportate tutte le combinazioni ma voi potete utilizzare quelle che più ritenete opportune.Private Sub CmdProt_Click() If Len(ProtTxt.Text) >= 1 Then password = ProtTxt.Text Else Msgbox "Inserisci una password" Exit Sub End If ' disabilita il pulsante di bloccaggio CmdProt.Enabled = False ' richiama il modulo per bloccare mouse e tastiera LockCursor (True) DisableCtrlAltCanc (True) ' eventualmente nasconde anche le icone del desktop e la barra delle applicazioni HideDesktop (True) HideStartBar (True) CmdLib.Default = True ProtTxt.Visible = False LibTxt.Visible = True ' dà il focus solo sulla casella di testo per inserire la password di sblocco LibTxt.SetFocus End SubA questo punto inseriamo il codice relativo al pulsante CmdLib che ci permetterà di liberare il mouse
Private Sub CmdLib_Click() If LibTxt= password Then LockCursor (False) DisableCtrlAltCanc (False) HideDesktop (False) HideStartBar (False) ElseIf Len(LibTxt) = 0 Then msgbox "Inserisci la password" LockCursor (True) Else msgbox "Password errata !" LibTxt.Text = "" End If End SubQui di seguito è riportato il codice dei moduli con i relativi richiami alle API. Basta inserire tramite l'apposito menu di VB un modulo bas e il gioco è fatto.
Cominciamo con il codice per disabilitare la tastiera che chiameremo ModDisableCtrlAltCanc.basDeclare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" _ (ByVal uAction As Long, ByVal uParam As Long, _ ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long Sub DisableCtrlAltCanc(Disabled As Boolean) SystemParametersInfo 97, Disabled, CStr(1), 0 End SubQuesto è il codice per nascondere le icone del desktop e la barra delle applicazioni (ModHideDesktop.bas)
Sub HideDesktop(ByVal Hidden As Boolean) Dim hwnd_Desktop As Long hwnd_Desktop = GetWindow(FindWindow("Progman", "Program manager"), GW_CHILD) If Hidden Then ShowWindow hwnd_Desktop, SW_HIDE Else ShowWindow hwnd_Desktop, SW_SHOW End If End Sub ' nasconde la barra delle applicazioni Sub HideStartBar(ByVal Hidden As Boolean) Dim hwnd_StartBar As Long hwnd_StartBar = FindWindow("Shell_TrayWnd", "") If Hidden Then ShowWindow hwnd_StartBar, SW_HIDE Else ShowWindow hwnd_StartBar, SW_SHOW End If End SubQuesto è il modulo per bloccare il mouse, (ModLockCursor.bas). La struttura RECT è indispensabile perché usata dall' Api GetWindowsRect e serve per far riconoscere al programma le dimensioni dello schermo.
Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long Declare Function GetDesktopWindow Lib "user32" () As Long Sub LockCursor(ByVal Locked As Boolean) Dim myform As RECT 'Dimensioni form Dim desktop As RECT 'Dimensioni desktop If Locked Then GetWindowRect FrmMike.hwnd, myform ClipCursor myform Else GetWindowRect GetDesktopWindow, desktop ClipCursor desktop End If End SubA questo punto si può creare l'eseguibile. Suggerirei tuttavia di rendere il programma attivo all'avvio di Windows, offrendo la possibilità all'utente di memorizzare la password e personalizzare il form, ma questo lo vedremo in un prossimo articolo.
(L'autore, Michele Neri, è disponibile per chiarimenti all'indirizzo micner@tiscalinet.it)