VB .NET - Obtendo a chave para um produto Microsoft Instalado


Você precisa o obter a chave de um projeto Microsoft Instalado ?

Este artigo  mostra um exemplo simples adaptado do VBA para o VB .NET que faz exatamente isso.

Essa função retorna a chave do produto para um produto Microsoft instalado (como o Windows ou Office). Basta fornecer a localização da chave do Registro para o DigitalProductID do software.

Abra o Visual Basic 2010 Express Edition e crie um novo projeto do tipo Windows Forms Application com o nome ObterRegistro;

A seguir no formulário padrão form1.vb inclua os controles TextBox, Button e Label conforme o leiaute abaixo:

A seguir no evento Click do botão de comando inclua o código abaixo:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = GetProductKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\", "DigitalProductId")
    End Sub

Estamos chamando a função GetProductKey() passando dois parâmetros:

Basta fornecer os argumentos para satisfazer os parâmetros da função (KeyPath como String, ValueName como String) que apontam para uma chave de registro particular.

No nosso exemplo estamos obtendo a chave do registro do Windows XP na linha a seguir obtém a chave do Windows XP em uma caixa de texto no formulário: GetProductKey ("HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \", "DigitalProductID")

O código da função GetProductKey é mostrada a seguir:

Public Function GetProductKey(ByVal KeyPath As String, ByVal ValueName As String) As String

        Dim HexBuf As Object = My.Computer.Registry.GetValue(KeyPath, ValueName, 0)

        If HexBuf Is Nothing Then Return "N/A"

        Dim tmp As String = ""

        For l As Integer = LBound(HexBuf) To UBound(HexBuf)
            tmp = tmp & " " & Hex(HexBuf(l))
        Next

        Dim StartOffset As Integer = 52
        Dim EndOffset As Integer = 67
        Dim Digits(24) As String

        Digits(0) = "B" : Digits(1) = "C" : Digits(2) = "D" : Digits(3) = "F"
        Digits(4) = "G" : Digits(5) = "H" : Digits(6) = "J" : Digits(7) = "K"
        Digits(8) = "M" : Digits(9) = "P" : Digits(10) = "Q" : Digits(11) = "R"
        Digits(12) = "T" : Digits(13) = "V" : Digits(14) = "W" : Digits(15) = "X"
        Digits(16) = "Y" : Digits(17) = "2" : Digits(18) = "3" : Digits(19) = "4"
        Digits(20) = "6" : Digits(21) = "7" : Digits(22) = "8" : Digits(23) = "9"

        Dim dLen As Integer = 29
        Dim sLen As Integer = 15
        Dim HexDigitalPID(15) As String
        Dim Des(30) As String

        Dim tmp2 As String = ""

        For i = StartOffset To EndOffset
            HexDigitalPID(i - StartOffset) = HexBuf(i)
            tmp2 = tmp2 & " " & Hex(HexDigitalPID(i - StartOffset))
        Next

        Dim KEYSTRING As String = ""

        For i As Integer = dLen - 1 To 0 Step -1
            If ((i + 1) Mod 6) = 0 Then
                Des(i) = "-"
                KEYSTRING = KEYSTRING & "-"
            Else
                Dim HN As Integer = 0
                For N As Integer = (sLen - 1) To 0 Step -1
                    Dim Value As Integer = ((HN * 2 ^ 8) Or HexDigitalPID(N))
                    HexDigitalPID(N) = Value \ 24
                    HN = (Value Mod 24)

                Next

                Des(i) = Digits(HN)
                KEYSTRING = KEYSTRING & Digits(HN)
            End If
        Next

        Return StrReverse(KEYSTRING)

    End Function

Usando o RegEdit obtemos para o exemplo a seguinte informação:

Executando o projeto para o exemplo em questão obtemos:

Cabe a você explorar as possibilidades do programa...

Pegue projeto completo aqui: ObterRegistro.zip

"Mas Jesus lhe observou: Deixa aos mortos o enterrar os seus mortos; porém tu vai e anuncia o reino de Deus." Lucas 9:60

Referências:


José Carlos Macoratti