Tutorial – creare finti messaggi di errore

Era una calda estate quella del 2011, periodo in cui ero solito andare su Nonciclopedia per leggere minchiate e farmi quattro risate. Un giorno, trovandomi tra alcune pagine in cui veniva sfottuto Windows Vista, mi sono imbattuto in un articolo dove trovai un video che mostrava come creare un finto virus (e di questo io me ne occuperò più avanti), pubblicato da un certo ZioRiso Production (che se lo cerco ora su YouTube mi escono dei balli di gruppo che non so cosa c’entrino con tutto questo).
Tra i video correlati poi ho trovato altri tutorial simili, tutti interessanti, ma uno in particolare non sfuggì alla mia vista: come creare finti messaggi di errore. E da lì partì una fissa che ce l’ho ancora adesso.
Con il tempo poi i tutorial di altri canali che spiegavano più o meno la stessa cosa sono aumentati a dismisura, ma hanno quasi tutti un grosso problema: sono spiegati male. Molto male. Soprattutto per la quantità di regole inutili che vengono mostrate.
Chi fa un tutorial potrebbe essere qualcuno che se ne frega di quello che spiega, e che tutto ciò che sa lo ha appreso da un altro tutorial, che a sua volta è stato fatto da qualcuno che ha appreso da qualcun altro eccetera eccetera, insomma se un pio programmatore ha in origine postato un video nel quale faceva degli esempi, questi esempi vengono presi come inspiegabili dogmi dai ragazzetti che ci fanno un video sullo stesso argomento. YouTube è pieno di video di questo genere. Spesso me li vado a cercare pure io, nel tentativo di scoprire qualcosa che non sapevo, ma al contrario finisco sempre per scoprire qualcosa che NON devo sapere, e che viene ritenuta vera. Alla luce di tutto questo decisi di fare un tutorial anch’io ma fatto, a detta mia, molto meglio di quelli che si trovano di solito. Poi però mi sono rotto le palle di fare le prove di registrazione e di vedere ogni volta quale pezzo veniva meglio, e alla fine ho lasciato perdere. Ma ora che ho questo bel blog qua, non mi lascio certo perdere l’occasione per scriverlo, il tutorial. Forse un tutorial scritto non è dimostrativo quanto uno a video, ma può essere sicuramente molto più efficace.
Naturalmente non mi assumo la responsabilità di quello che può succedere al vostro computer, anche se mi viene da ridere mentre sto scrivendo sta premessa considerando quanto innocuo sia ciò che sto per spiegarvi.

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:

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:

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: 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 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 mica lasciare un file così “strano” e dalla dubbia icona sul desktop di un nostro amico! Per essere fatto bene, lo scherzo deve essere cammuffato. Quello che consiglio di fare è di creare un collegamento ingannevole. Vediamo come si fa.

  1. Clicchiamo col tasto destro sul file e premiamo Crea collegamento.
  2. Sul collegamento che compare clicchiamo di nuovo col tasto destro e premiamo su Proprietà.
  3. Nella scheda Collegamento premiamo il pulsante in fondo Cambia icona.
  4. Nella finestra che compare scegliamo un’icona a piacere, come quella di Internet Explorer o di una normale cartella.
  5. Confermiamo premendo su OK e poi di nuovo sull’OK delle proprietà.
  6. Rinominiamo il collegamento in modo da renderlo credibile.
  7. Nascondiamo il vero file in qualche cartella dove sarà difficile trovarlo.

Il gioco è fatto… buon divertimento!

Anch’io in questo tutorial ho inserito qualche regola inutile (per esempio, non necessariamente “While” e “Until” vanno posizionati alla fine del ciclo), ma ai nostri fini non serve più di tanto specificare cosa è obbligatorio e cosa no, altrimenti mi verrebbe un articolo chilometrico.
Sicuramente non può interessare a tutti, ma in ogni caso ho in progetto di fare altri tutorial di scherzi per il pc… per il momento fate buon uso di questa guida!

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

Ti potrebbe interessare...

7 Responses

  1. fabri ha detto:

    ciao ho fatto un programma sul blocco note utilizzando per buona parte questi codici, il problema è che con le inputbox ho fatto diverse variabili (ad esempio se scrivi ciao ti esce un messaggio se scrivi qualcosa altro te ne esce uno diverso e cosi via) ma è come se avessi scritto solo le prime tre, mi potete aiutare? grazie in anticipo e complimenti per il tutorial!!

  2. Johne963 ha detto:

    Maintain the excellent job mate. This web blog publish shows how well you comprehend and know this subject. fcdegdcdedde

  3. Smithc205 ha detto:

    Merely a smiling visitor here to share the love , btw outstanding style. Audacity, a lot more audacity and always audacity. by Georges Jacques Danton. bffkacadgcgfedfa

  4. eyelashes ticker ha detto:

    Pretty nice post. I just stumbled upon your blog and wished to mention that I have truly enjoyed
    surfing around your wesblog posts. In any case I will be subscribing for your rss feed and I’m hoping you wrie once more very
    soon!

  5. Vincysuper07 ha detto:

    Come potrei fare per mostrare più finestre contemporaneamente??

    • TuttoTokkio ha detto:

      Non è proprio semplice, dovresti creare un file VBS che esegue altri file VBS dove questi ultimi contengono le finestre che vuoi mostrare contemporaneamente. Sarebbe un’idea per un nuovo articolo, grazie per l’idea 🙂 comunque su hackerpergioco ho scritto un articolo su come aprire il blocco note che scrive da solo, puoi prendere spunto da quello

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *