lunedì 23 ottobre 2017

Vba rilevare il codice Product ID di Windows 10

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_vba-rilevare-il-codice-product-id-di-win_1556.aspx

In questo articolo, vedremo come rilevare il prodoct ID di Windows 10 (e precedenti) tramite il linguaggio di programmazione Visual Basic Application, da utilizzare nei vari applicativi del pacchetto Microsoft Office, sia Word, Excel Power point ed altri.
Premessa fondamentale, questo non vuole essere un articolo di hacking o altro, ma solo come poter rilevare il possibile codice di Windows, utile ai fini personali o per l’utilizzo di licenze del proprio applicativo.
Apriamo un qualsiasi programma di Microsoft Office nel nostro caso è stato utilizzato il programma di video scrittura Microsoft Word, ma possiamo utilizzare anche Excel.
A questo punto, tramite il menu “Sviluppo” oppure dal menu “Visualizza” selezioniamo il pulsante “Macro” e nella finestra che viene aperta, scriviamo il nome della macro in modo da poterla creare, oppure se c’è la voce “Editor Visual Basic Application” utilizziamo quella.
Dopo aver aperto la finestra relativo all’editor di Visual Basic, tramite la voce “Strumenti” selezioniamo la voce “Riferimenti” Verrà visualizzata una finestra come riportato in figura 1, nel quale dovremmo selezionare la voce “Microsoft Scripting runtime” mettendo la spunta e confermando il tutto tramite il pulsante “OK”.

Figura 1 – La finestra dei riferimenti con il componente selezionato

A questo punto sopra ogni dichiarazione, scriviamo la dichiarazione per obbligare la dichiarazione delle variabili.
Quindi in alto sopra ad ogni dichiarazione scriviamo il seguente frammento di codice.

Option Explicit

Ora scriviamo la funzione, che ci restituisce il codice del product key del nostro Windows, tramite un algoritmo, che in base a certi valori e posizioni rileva le informazioni.
La funzione è la seguente.

 Function ConvertiChiave(Chiave As Variant)
Const ChiaveOffset = 52
Dim contatore As Integer
Dim ChiaveRilevata As String
contatore = 28
Dim Caratteri As String
Caratteri = "BCDFGHJKMPQRTVWXY2346789"
Dim PosCorrente As Integer
Dim Indice As Integer
Do
PosCorrente = 0
Indice = 14
Do
PosCorrente = PosCorrente * 256
PosCorrente = Chiave(Indice + ChiaveOffset) + PosCorrente
Chiave(Indice + ChiaveOffset) = (PosCorrente \ 24) And 255
PosCorrente = PosCorrente Mod 24
Indice = Indice - 1
Loop While Indice >= 0
contatore = contatore - 1
ChiaveRilevata = Mid(Caratteri, PosCorrente + 1, 1) & ChiaveRilevata
If (((29 - contatore) Mod 6) = 0) And (contatore <> -1) Then
contatore = contatore - 1
ChiaveRilevata = "-" & ChiaveRilevata
End If
Loop While contatore >= 0
ConvertiChiave = ChiaveRilevata
End Function


Ora non ci resta che creare la funziona di tipo sub, che verrà chiamata dall’esecuzione della Macro, per richiamare tale funzione, passando come parametro, il valore rilevato nella chiave del registro di Windows.

 Sub RilevaProductID()
On Error GoTo errore
Dim WscriptShell As Object
Set WscriptShell = CreateObject("WScript.Shell")
Dim risultato As String
risultato = ""
risultato = ConvertiChiave(WscriptShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"))
MsgBox ("Il codice è: " & risultato)
Exit Sub
errore:
MsgBox (Err.Description)
End Sub




 Come si è visto dal frammento di codice precedente tramite il metodo RegRead dell’oggetto shell di wsscript, rileviamo il dato presente nel file di registro di Windows e lo passiamo alla funzione con l’algoritmo che calcola il product ID.

Conclusioni

L’articolo ha voluto fornire una tecnica per rilevare il codice ID di Windows, utile ai fini di realizzare e distribuire applicazioni che girano nei singoli client, permettendo così che ogni software ha una sua licenza.
Le potenzialità offerte dal linguaggi Vba, che da diversi anni accompagnano il pacchetto Microsoft Office, permettono di aggiungere ulteriori funzionalità.

Nessun commento: