Код продукта Windows

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Код продукта Windows

Сообщение АндрейБ » 23.07.2014 (Ср) 16:46

Подскажите где можно взять в системе информацию: Код продукта Windows.
Кто ищет, тот всегда найдет ...

Gasparini
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 06.09.2012 (Чт) 14:42

Re: Код продукта Windows

Сообщение Gasparini » 25.07.2014 (Пт) 10:51

Берётся в реестре "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"

Затем расшифровывается:

Код: Выделить всё
Public Function ConvertToOSProductKey(sKey() As Byte) As String
    Dim X As Long, i As Long, Chars As String, Cur As Long, Last As Long, KeyPart1 As String, IsWin8 As Integer, KeyOutput As String
    Dim Key() As Byte
    Key = Binary1ArrayTo0Array(sKey)
    IsWin8 = (Key(66) \ 6) And 1
    Key(66) = (Key(66) And &HF7) Or ((IsWin8 And 2) * 4)
    i = 24
    Chars = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Cur = 0
        X = 14
        Do
            Cur = Cur * 256
            Cur = Key(X + 52) + Cur
            Key(X + 52) = (Cur \ 24)
            Cur = Cur Mod 24
            X = X - 1
        Loop While X >= 0
        i = i - 1
        KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
        Last = Cur
    Loop While i >= 0
    If (IsWin8 = 1) Then
        KeyPart1 = Mid(KeyOutput, 2, Last)
        KeyOutput = Replace(KeyOutput, KeyPart1, KeyPart1 & "N", 2, 1, 0)
        If Last = 0 Then KeyOutput = "N" & KeyOutput
    End If
    ConvertToOSProductKey = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)
End Function

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Код продукта Windows

Сообщение АндрейБ » 25.07.2014 (Пт) 12:27

Dim Reg As Variant
Dim timezone_system As String
Set Reg = CreateObject("WScript.Shell")
timezone_system = Reg.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId")

Ругается что не может открыть для чтения раздел реестра - почему?
Кто ищет, тот всегда найдет ...

Gasparini
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 06.09.2012 (Чт) 14:42

Re: Код продукта Windows

Сообщение Gasparini » 27.07.2014 (Вс) 23:07

Во вложенном архиве VBS-скрипт, который получает код продукта.
Надеюсь уж его-то вы сможете перевести в VB6.
Вложения
ShowKey_v1.3.zip
(1.25 Кб) Скачиваний: 150

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Код продукта Windows

Сообщение АндрейБ » 28.07.2014 (Пн) 16:22

Спасибо - надеюсь что смогу перевести в VB6:)
Кто ищет, тот всегда найдет ...

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Код продукта Windows

Сообщение АндрейБ » 28.07.2014 (Пн) 17:14

Gasparini, переработал ваш код в VB6, он не сильно отличатся от того что я написал до этого сам, но суть не изменилась:

On Error Resume Next
Dim WshShell As Variant, DigitalID As Variant
Dim KEY As String, ProductName As String, ProductID As String
Set WshShell = CreateObject("WScript.Shell")
KEY = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
DigitalID = WshShell.RegRead(KEY & "DigitalProductId")
ProductName = "Product Name: " & WshShell.RegRead(KEY & "ProductName")
ProductID = "Product ID: " & WshShell.RegRead(KEY & "ProductID")

В окне отладки DigitalID , ProductID = Empty,
а когда пытаешь напрямую в отладочном окне указать например
?ProductID
Ругается что не может открыть для чтения раздел реестра
Кто ищет, тот всегда найдет ...

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Код продукта Windows

Сообщение АндрейБ » 28.07.2014 (Пн) 17:38

Gasparini, если убрать строку пропуска ошибок 'On Error Resume Next
то в VB6 ругается что не может открыть для чтения раздел реестра.
Кто ищет, тот всегда найдет ...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 28.07.2014 (Пн) 17:55

Run as administrator?

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Код продукта Windows

Сообщение АндрейБ » 29.07.2014 (Вт) 9:08

В системе пользователь администратор.
В VB6 надо тоже это как то декларировать?
Реест значение ProductName - дает, а DigitalProductId и ProductID - выдает ошибку может открыть для чтение.
Кто ищет, тот всегда найдет ...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.07.2014 (Вт) 13:04

Речь не о Win7?
А ещё, подобные штуки может блокировать антивирус.

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Код продукта Windows

Сообщение АндрейБ » 29.07.2014 (Вт) 16:13

Каспер отключил - все равно не работает.
Кто ищет, тот всегда найдет ...

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Код продукта Windows

Сообщение АндрейБ » 29.07.2014 (Вт) 16:13

у меня win8.
Кто ищет, тот всегда найдет ...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.07.2014 (Вт) 16:18

АндрейБ писал(а):В системе пользователь администратор.
АндрейБ писал(а):у меня win8.

Ну так UAC?

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Re: Код продукта Windows

Сообщение АндрейБ » 30.07.2014 (Ср) 9:30

UAC поставил на самый низ. Перезагрузил машину. Касперский отключил. Все равно ошибка чтение реестра.

Главное скрипт от Gasparini ShowKey_v1.3.zip - работает, а через VB6 не могу получить
из реестра DigitalProductId и ProductID , хотя ProductName дает.
Кто ищет, тот всегда найдет ...

Gasparini
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 06.09.2012 (Чт) 14:42

Re: Код продукта Windows

Сообщение Gasparini » 01.08.2014 (Пт) 0:40

Дело не в UAC и не в правах, уверен в ними всё в порядке.
С вероятностью 99.99% твоя Windows 8 - 64-битная.
А твоя программа работает как 32-битное приложение, которым и является.
Соответственно на неё автоматически распространяется механизм перенаправления WOW64 в реестре и твоя программа на самом деле пытается прочитать следующий путь: "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion", а не тот, что ты указываешь.
На VBS-скрипты механизм перенаправления WOW64 не распространяется, так как его исполняет родной виндовский 64-битный Windows Script Host.

Как обойти данное ограничение?
Читать реестр через API, там есть флаги, позволяющие игнорировать WOW64 перенаправление и читать напрямую.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

    TopList