Come creare finti messaggi di errore

Di cosa si tratta

Sono semplici file che generano una serie di messaggi di errore finti, molto divertenti per fare scherzi ad amici, compagni, e perché no, magari anche al tecnico della scuola (ed io ne so qualcosa). Tecnicamente parliamo di script in Visual Basic che andiamo a scrivere direttamente dal blocco note, quindi niente di sensazionale, non c’è bisogno di installare chissà quali programmi. Funzionano però solo su Windows (qualsiasi edizione).

1. Introduzione generale

Apriamo il blocco note (si trova in Tutti i programmi > Accessori) e digitiamo il seguente codice:
msgbox "testo"
dove nel testo dobbiamo scrivere ciò che apparirà nella finestra. A questo punto andiamo su File > Salva con nome e nella barra inferiore cambiamo l’estensione da .txt a Tutti i file, dopodichè scriviamo manualmente alla fine del nome del file l’estensione .vbs (Visual Basic Script) e salviamo dove ci pare. Infine apriamo il file.
Se per esempio scrivo “Hello world!” come testo ottengo il seguente risultato:
msgbox1
Se per sbaglio dovessimo salvare il file in formato di testo possiamo comunque rinominare il file modificandone l’estensione.

Accorgimento
Quando si ha a che fare con le estensioni, un fastidio abbastanza frequente si verifica quando queste non compaiono. In questo caso, per farle comparire, basta andare nelle Opzioni cartella presenti nel Pannello di controllo o, nei Windows più recenti, anche nel menù di Esplora file, e togliere la spunta alla casella Nascondi le estensioni per i tipi di file conosciuti presente nella scheda Visualizzazione.

Per andare a capo nel messaggio di una finestra dobbiamo aggiungere un codice “speciale”, ovvero vbCrLf, come nel seguente esempio (lo spazio tra il + e qualsiasi altro codice non è necessario, ma consiglio di metterlo per una questione di leggibilità):
msgbox "Riga 1" + vbCrLf + "Riga 2" + vbCrLf + "Riga 3"
Per inserire le virgolette nel testo basta che le scriviamo due volte consecutivamente.
Esempio:
msgbox "Per continuare premi ""OK"""
E questo è il risultato:msgbox2

Per creare una serie di messaggi consecutivi basta che andiamo a capo e inseriamo nuovamente lo stesso codice, scrivendoci di nuovo un testo.

2. Testo, valore, titolo

Il testo è obbligatorio, ma ci sono altri due parametri facoltativi (a parer mio strettamente necessari): un valore e il titolo. Lo schema è il seguente:
msgbox "testo",valore,"titolo"
Il titolo è, chiaramente, il titolo della finestra del messaggio. Qui, a differenza del testo, non si può andare a capo.
Per valore invece intendo un valore numerico che definisce lo stile della finestra (pulsanti, simbolo, ecc.). Questo può essere scritto sia integralmente che sottoforma di somma: io consiglio la seconda scelta, perché è più facile ricordarsi pochi numeri da sommare a cosa corrispondono piuttosto che tutte le singole somme. Per facilitare la situazione, facciamo finta che il numero sia il risultato di una somma di 8 numeri. Ad esempio 0 corrisponde a 0+0+0+0+0+0+0+0. Adesso diciamo che ogni numero di quelli da sommare è un gruppo. Inoltre il valore che può assumere ogni gruppo può essere sostituito da una “parolina chiave” detta costante. Di seguito riporto la tabella con tutti i possibili valori e le rispettive costanti e descrizioni.

Valore Costante Descrizione
Gruppo 1 – Pulsanti
0 vbOkOnly Compare solo il pulsante OK
1 vbOkCancel Compaiono i pulsanti OK e Annulla
2 vbAbortRetryIgnore Compaiono i pulsanti Annulla, Riprova e Ignora
3 vbYesNoCancel Compaiono i pulsanti , No e Annulla
4 vbYesNo Compaiono i pulsanti e No
5 vbRetryCancel Compaiono i pulsanti Riprova e Annulla
Gruppo 2 – Icona
0 Nessuna icona
16 vbCritical Compare il simbolo di errore
32 vbQuestion Compare il simbolo di domanda
48 vbExclamation Compare il simbolo di attenzione
64 vbInformation Compare il simbolo di informazione
Gruppo 3 – Pulsante predefinito
0 vbDefaultButton1 Imposta il primo pulsante come predefinito
256 vbDefaultButton2 Imposta il secondo pulsante come predefinito
512 vbDefaultButton3 Imposta il terzo pulsante come predefinito
Gruppo 4 – Modalità
0 vbApplicationModal Modalità applicazione: l’utente deve rispondere al messaggio per continuare
4096 vbSystemModal Modalità sistema: tutte le applicazioni sono sospese finché l’utente non risponde al messaggio
Gruppo 5 – Pulsante di aiuto aggiuntivo
0 Nessun pulsante di aiuto
16384 vbMsgBoxHelpButton Aggiunge un pulsante di aiuto che apre la guida in linea
Gruppo 6 – Comparsa in primo piano
0 La finestra compare normalmente
65536 vbMsgBoxSetForeground La finestra compare in primo piano
Gruppo 7 – Allineamento del testo
0 Testo allineato a sinistra
524288 vbMsgBoxRight Testo allineato a destra
Gruppo 8 – Inversione destra e sinistra per le scritture arabe
0 Finestra orientata da sinistra verso destra
1048576 vbMsgBoxRtlReading Finestra orientata da destra verso sinistra

Tutto ciò è tanto complesso quanto stupido.
Se per esempio vogliamo una finestra con i pulsanti Sì e No e come icona il simbolo di errore, possiamo scrivere sia 4+16, sia vbYesNo+vbCritical, sia direttamente 20. Come già detto io preferisco la prima forma, perché è difficile ricordarsi tutte le somme in base alla necessità, mentre scrivere ogni volta le costanti sarebbe lento e noioso (queste di solito vengono usate nei compilatori, ad esempio Visual Studio, dove interviene l’autocompletamento del codice).
Inoltre sconsiglio di utilizzare le ultime caratteristiche come il primo piano o la modalità: a parte che servono poco al nostro scopo, potrebbero non funzionare correttamente dato che stiamo scrivendo un semplice script e non un particolare programma.
Da notare è il comportamento della “X” per chiudere la finestra: se il messaggio ha solo un pulsante (cioè OK) la crocetta ne assumerà la stessa funzione, se invece ci sono due o più pulsanti essa è sbiadita e non si può premere, costringendo l’utente a rispondere.
Qui sotto riporto un esempio di una serie di messaggi:
msgbox "Errore fatale. Formattare il pc?",4+16,"Errore"
msgbox "Sei sicuro?",4+32,"Errore"
msgbox "Quindi non vuoi formattare il pc?",4+32,"Errore"
msgbox "Hai confermato di voler formattare il pc.",48,"Errore"

3. Condizioni e variabili

Introduciamo adesso le condizioni. Quando rispondiamo ad una finestra premendo su un pulsante, questa nostra risposta definisce un valore in uscita, che, se non specifichiamo nulla come abbiamo fatto fino a questo punto, risulta praticamente inutile. Se però vogliamo far comparire un messaggio diverso a seconda della scelta che fa l’utente, dobbiamo prendere in considerazione questo valore per creare conseguenze condizionate.
Prima però dobbiamo introdurre un altro concetto: le variabili.
Cerco di spiegare il minimo necessario ai nostri bisogni perché non sto scrivendo un corso di informatica.
Una variabile è un piccolo pezzetto di memoria dove possiamo memorizzarci un valore (nel nostro caso numerico). Dobbiamo quindi fare in modo che il valore restituito in risposta da MsgBox venga “salvato” da qualche parte. Nell’esempio qui sotto possiamo vedere la sintassi completa.
a=msgbox("testo",valore,"titolo")
In questo esempio abbiamo creato una variabile “a” nella quale verrà memorizzato un certo valore a seconda del pulsante premuto. Possiamo chiamarla come più ci sta simpatica, anche “pagnotta” o “saponetta”, tanto non sarà visibile a quel povero fesso che aprirà il file!
pagnotta=msgbox("testo",valore,"titolo")
Naturalmente possiamo usare questa forma qui per scrivere le MsgBox anche se non vogliamo creare una condizione. Io per esempio spesso uso questa solo per abitudine.
Come per il valore dello stile anche qui esistono le costanti, ma possiamo tranquillamente dimenticarci gruppi e casini vari… qua è più semplice la cosa. Di seguito riporto la tabella con i valori e i pulsanti di origine corrispondenti (escluso il pulsante aggiuntivo di aiuto).

Valore Costante Pulsante
1 OK OK
2 Cancel Annulla
3 Abort Interrompi
4 Retry Riprova
5 Ignore Ignora
6 Yes
7 No No

Come al solito, sconsiglio di utilizzare le costanti.
Per creare una condizione dobbiamo usare i comandi If/Then/Else (traducibili come “se/allora/altrimenti”). L’Else lo possiamo lasciar perdere (per ora non ci serve) e prendiamo in considerazione solo If e Then. Il codice qui sotto mostra come vanno utilizzati:
a=msgbox("Premi un pulsante",4+64,"Test")
if a=6 then msgbox "Hai premuto ""Sì""",64,"Risposta 1"
if a=7 then msgbox "Hai premuto ""No""",64,"Risposta 2"

Se l’utente al primo messaggio preme “Sì” gli appare la finestra “Risposta 1”, se preme “No” gli appare la finestra “Risposta 2”.
Se vogliamo più di un messaggio all’interno di una sola condizione dobbiamo andare a capo prima di scriverne il contenuto e terminare con End If, seguendo il codice qui sotto:
a=msgbox("Premi un pulsante",4,"Test")
if a=6 then
msgbox "Messaggio 1"
msgbox "Messaggio 2"
end if

Nell’esempio sovrastante, solo se l’utente preme “Sì” compariranno prima “Messaggio 1” e poi “Messaggio 2”, altrimenti lo script termina direttamente.
Ecco come potremmo applicarlo:
a=msgbox("Vuoi inviare qualche spicciolo ad un pover'uomo?",4+32,"Abbi pietà")
if a=6 then msgbox "Verranno inviati € 1873476.00 allo zio Bill",64,"Bill Gates ringrazia"
if a=7 then
msgbox "Non hai proprio un cuore.",48,"Vergogna"
msgbox "Windows smetterà di funzionare.",16,"Dovresti solo vergognarti"
end if

Nel caso in cui invece abbiamo tre pulsanti e per due di questi vogliamo le stesse condizioni, possiamo usare il comando or:
a=msgbox("Esempio con tre pulsanti",2,"Test")
if a=3 then msgbox "Hai premuto ""Interrompi"""
if a=4 or a=5 then msgbox "Non hai premuto ""Interrompi"""

In quest’ultimo esempio sia se l’utente preme “Riprova” che “Ignora” visualizza comunque il messaggio della seconda condizione.
Infine possiamo creare una “condizione nella condizione”, stando attenti ad usare variabili diverse:
a=msgbox("Frequenti una scuola?",4+32,"Test")
if a=6 then b=msgbox("Frequenti un liceo?",4+32,"Test")
if b=6 then msgbox "Frequenti un liceo"
if b=7 then msgbox "Frequenti una scuola ma non un liceo"
if a=7 then msgbox "Non frequenti una scuola"

In questo modo possiamo quindi creare delle strutture ramificate.

4. Iterazioni e cicli annidati

Possiamo crare un ciclo in cui uno o più messaggi si ripetono finché l’utente non preme un pulsante diverso o per un determinato numero di volte a nostra scelta.
Per il primo caso usiamo i comandi Do/Loop while e Do/Loop until.
Il Do va posizionato all’inizio del ciclo, seguito da un’andata a capo. Loop while e Loop until vanno scritti alla fine del ciclo e tra di loro sono, potremmo dire, l’opposto: il primo comando fa ripetere il ciclo finché l’utente continua a premere un pulsante da noi scelto, il secondo fa ripetere il ciclo finché l’utente non preme un certo pulsante scelto.
Vediamo un esempio con Loop while:
do
a=msgbox("Ti piace la cioccolata?",4+32,"Questionario")
loop while a=7

Vediamo ora un esempio con Loop until:
do
a=msgbox("Ti piace la cioccolata?",4+32,"Questionario")
loop until a=6

I due esempi qui sopra producono gli stessi risultati quando eseguiti.
Il primo fa ripetere il ciclo finché l’utente continua a premere “No”, e quindi appena preme “Sì” il ciclo finisce.
Il secondo fa ripetere il ciclo finché l’utente non preme “Sì”, quindi, qualsiasi altra cosa venga premuta, il ciclo si ripete.

Attenzione
Occhio a non creare dei cicli infiniti. Nel caso lo facciate, possiamo comunque terminare lo script dal Task Manager: facciamo tasto destro sulla barra degli strumenti di Windows e andiamo su Gestione attività (in alternativa, premiamo contemporaneamente sulla tastiera Ctrl+Shift+Esc, oppure Ctrl+Alt+Canc e poi andiamo su Gestione attività), selezioniamo Windows Script Host e clicchiamo su Termina attività.

Ecco un esempio di come si potrebbero usare:
do
a=msgbox("Formattare il computer?",4+48,"FATAL ERROR")
if a=7 then msgbox "ERROR System32/Windows/Windows.sys",16,"FATAL ERROR"
loop until a=6
msgbox "Il processo di formattazione si avvierà in pochi istanti."

Per il secondo caso invece, usiamo i comandi For/To/Next nel seguente modo:
for i=1 to 10
a=msgbox("Errore: Windows non risponde",16,"Virus fatale")
next

La “i” in questo caso è un’altra variabile usata come contatore. Anche questa la possiamo chiamare come ci pare, io la chiamo così solo per abitudine (questioni di informatica).
In questo esempio, il messaggio compreso nel ciclo viene ripetuto 10 volte.
Naturalmente è anche possibile inserire un ciclo all’interno di un altro ciclo, nei casi dove per esempio sono necessarie due conferme (finte) invece di una.

5. Inserire le InputBox

Questa è già una di quelle cose che raramente viene mostrata nei video-tutorial, almeno quelli in italiano.
Possiamo creare una finestra in cui l’utente deve inserire un testo, e in base a questo potremmo crearci cicli e condizioni a volontà.
inputbox "testo"
Il testo è obbligatorio, ma esistono altri quattro parametri opzionali: un titolo, un testo predefinito, la posizione X e la posizione Y della finestra.
Inoltre se vogliamo salvare il testo fornito in riposta dobbiamo utilizzare le variabili, come abbiamo fatto per le MsgBox.
a=inputbox("testo","titolo","testo default",XPos,YPos)
Il testo e il titolo funzionano come nelle MsgBox.
Il testo default è il testo predefinito che compare già scritto nella barra si scrittura quando si apre la finestra.
XPos e YPos indicano la distanza in pixel della finestra rispettivamente dal bordo superiore e sinistro dello schermo. Se omessi, la finestra si posiziona al centro dello schermo.
Se l’utente preme “Annulla”, verrà restituito un testo di lunghezza zero come valore.
Vediamo adesso qualche esempio.
Esempio 1:
risposta=inputbox("Cosa vuoi cercare nel pc?","Ricerca (fasulla)")
a=msgbox("Errore: """+risposta+""" non trovato",16,"404 not found")

In questo esempio, nella MsgBox viene visualizzato il testo inserito nella InputBox.
Esempio 2:
pw=inputbox("Scrivi la password per continuare","Inserisci password")
if pw="tuttotokkio" then
a=msgbox("Password corretta!",64,"Risultato")
else a=msgbox("Password sbagliata!",48,"Risultato")
end if

In questo esempio, solo se il testo inserito è “tuttotokkio” compare il messaggio che avvisa che la password è corretta, altrimenti compare l’altro messaggio. Come abbiamo potuto notare, in questo esempio mi sono servito dell’Else: la condizione scritta di seguito si esegue in qualsiasi altro caso che non sia un If scritto prima. Dobbiamo ricordarci però di andare a capo dopo il primo then e di chiudere con End If.
Se vogliamo inserire più di un If in un caso come l’esempio precedente, dobbiamo usare il comando ElseIf:
pw=inputbox("Scrivi la password per continuare","Inserisci password")
if pw="tuttotokkio" then
a=msgbox("Password corretta!",64,"Risultato")
elseif pw="ciao" then a=msgbox("Tanti saluti")
elseif pw="stupido" then a=msgbox("Che sei")
else a=msgbox("Password sbagliata!",48,"Risultato")
end if

In questo caso quindi abbiamo tre possibili condizioni più una di default.
Esempio 3:
do
pw=inputbox("Come si chiama il 44° presidente degli Stati Uniti?")
if pw="obama" then
msgbox "Risposta esatta!"
else msgbox "Sbagliato. Ritenta."
end if
loop until pw="obama"

In questo esempio il ciclo si ripete finché l’utente non scrive la risposta che vogliamo.

6. Tocco finale

Non vorremmo di certo lasciare un file così “strano” e dalla dubbia icona sul desktop di un nostro amico! Per essere fatto bene, lo scherzo deve essere camuffato. Quello che consiglio di fare è di creare un collegamento ingannevole, in modo da far credere alla vittima che il nostro finto virus sia un normale programma.

Il gioco è fatto… buon divertimento!

Anche se in questo tutorial ho inserito qualche regola inutile (per esempio, non necessariamente “While” e “Until” vanno posizionati alla fine del ciclo), ai nostri fini non serve più di tanto specificare cosa è obbligatorio e cosa no, altrimenti mi verrebbe un articolo chilometrico. Per qualsiasi dubbio è possibile postare commenti (vedi sotto). Fai buon uso di questa guida e condividi se ti è piaciuto il tutorial!

Fonti: Me stesso, MSDN, VB6reference, Nonciclopedia, YouTube

12 thoughts on “Come creare finti messaggi di errore”

  1. msgbox “Ciao sono Windows”,64
    a=msgbox (“Se vuoi parliamo un po’?”,4+32)
    do
    if a=6 then
    pw=inputbox(“Ok di che cosa vuoi parlare.Scegli fra:” + vbCrLf + “Fortnite , Sport , Cards.”)

    if pw=”fortnite” or “sport” or “cards”then
    msgbox(“ok, lo sapevi che …….”)

    else msgbox(“Non ho capito bene?”),0

    loop util pw=”fortnite” or “sport” or “cards”

    if a=7 then
    msgbox “vabbe sarà per un altra volta”

    1. Ciao, ci sono diversi errori. Ti copio qui sotto il codice corretto.
      msgbox "Ciao sono Windows",64
      a=msgbox("Se vuoi parliamo un po'?",4+32)
      if a=6 then
      do
      pw=inputbox("Ok di che cosa vuoi parlare? Scegli fra:" + vbCrLf + "Fortnite, Sport, Cards.")
      if pw="fortnite" or pw="sport" or pw="cards" then msgbox "Ok, lo sapevi che ..." else msgbox "Non ho capito bene?",0
      loop until pw="fortnite" or pw="sport" or pw="cards"
      end if
      if a=7 then msgbox "Vabbè sarà per un'altra volta"

      Oltre a diversi errori di battitura (come util invece di until), è scorretto scrivere or "sport" invece di or pw="sport"
      Inoltre c’era un altro problema che ora non ti sto a spiegare per il quale era necessario l’End if.

    1. Magari si potesse! Purtroppo non si può modificare il testo all’interno dei pulsanti, ma se proprio ti interessa puoi scaricare Visual Studio (la versione della community è gratuita) e creare tutto ciò che vuoi 😉

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.