- Le maschere di bit nel registro di configurazione -
 
COSA SERVE PER QUESTO TUTORIAL
Chiedi sul FORUM | Glossario l'editor del Registro di Sistema
Le maschere di bit nel registro e UserPreferencesMask

I COLORI DI SISTEMA DI WINDOWS
Funzionamento dei colori di sistema.

Una maschera di bit è un valore REG_BINARY (binario) con una quantità variabile di byte (ovvero un numero da 0 a 255, in genere rappresentati in formato esadecimale cioè con due cifre da 0 a 9 e da A a F) in forma di flag (per informazioni vedere l'articolo sulle flag nel Registro di sistema) che serve a contenere una grande quantità di impostazioni in un solo valore, permettendo di combinarle. Si tratta in sostanza di un insieme di flag. Il concetto risulterà più chiaro dopo aver analizzato il valore UserPreferencesMask.

USERPREFERENCESMASK
Un complesso esempio di maschera di bit.

UserPreferencesMask è un valore REG_BINARY di 4 byte che si trova nella chiave HKEY_CURRENT_USER\Control Panel\Desktop ed è utilizzato per memorizzare diverse impostazioni sulla gestione delle finestre di Windows.

Bit Maschera di bit Descrizione
0 0x00000001 Le finestre diventano attive al passaggio del puntatore
1 0x00000002 Attiva l'animazione nella visualizzazione dei menù, vedi il bit 9.
2 0x00000004 Attiva l'effetto scorrimento per l'apertura delle caselle combinate.
3 0x00000008 Attiva lo scorrimento continuo per le caselle di scorrimento.
4 0x00000010 Attiva l'effetto sfumatura nella barra dei titoli delle finestre.
5 0x00000020 I tasti di scelta rapida di bottoni e menù sono sottolineati solo alla pressione di ALT.
6 0x00000040 Le finestre attivate col passaggio del mouse vengono anche portate in primo piano.
7 0x00000080 Funzionalità di intercettazione del mouse.
8 0x00000100 Riservato al futuro.
9 0x00000200 Attiva l'effetto dissolvenza dei menù. Altrimenti utilizza l'effetto scorrimento.
10 0x00000400 Attiva l'effetto dissolvenza quando selezioni un menù o una voce di una casella combinata.
11 0x00000800 Attiva l'animazione per le descrizioni dei comandi, vedi bit 12.
12 0x00001000 Attiva l'effetto dissolvenza delle descrizioni dei comandi. Altrimenti utilizza lo scorrimento.
13 0x00002000 Attiva l'ombra del cursore.
31 0x80000000 Attiva tutti gli effetti di questa maschera di bit.

Nota: "0x" significa che si sta parlando di un numero in formato esadecimale.
Per capire meglio facciamo qualche esempio. Se volessimo fare in modo che le finestre diventino attive al passaggio del puntatore e attivare l'effetto ombra per il mouse non dovremmo che impostare la UserPreferencesMask su 0x80002001. Vediamo in dettaglio il perché:

  • la prima cifra, 8, è necessaria affinché la maschera non venga ignorata disabilitando tutti gli effetti;
  • la quinta cifra, 2, serve ad indicare che l'effetto ombra del mouse è attivo (come riportato nella tabella sopra);
  • l'ultima cifra, 1, indica invece che al passaggio del mouse su di una finestra essa deve essere attivata;

Invece se si volessero attivare tutti gli effetti, la maschera dovrebbe essere 0x80003FFF. Come si può notare non è stato fatto nient'altro che eseguire la somma di tutti i valori riportati nella tabella:


00000001 +
00000002 +
00000004 +
00000008 +
00000010 +
00000020 +
00000040 +
00000080 +
00000100 +
00000200 +
00000400 +
00000800 +
00001000 +
00002000 +
80000000 =
80003FFF

Nota: sono stati omessi i simboli di esadecimale (0x).
In sostanza per comporre una maschera di bit è sufficiente effettuare la somma dei valori esadecimali delle singole impostazioni che si desidera attivare.
Finora abbiamo lavorato con questa maschera come fosse una DWORD (un valore intero da 32 bit), ma in realtà il valore UserPreferencesMask è in formato REG_BINARY, il che significa che non possiamo inserire direttamente il valore "80003FFF". La DWORD che noi vogliamo rapprenstare va inserita secondo la convenzione little-endian, ovvero dal byte meno significativo al più significativo, ad esempio: 0x12345678 diventa {0x78, 0x56, 0x34, 0x12} (e non {0x12, 0x34, 0x56, 0x78}, come sarebbe nella convenzione big-endian). E più nello specifico il nostro valore andrà inserito come {0xFF, 0x3F, 0x00, 0x80}  o più brevemente FF3F0080.
 

<< INDIETRO by VeNoM00