Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
7 / 7 / 1
Регистрация: 17.02.2012
Сообщений: 46
1

Достаём ключи Microsoft из реестра Windows

26.11.2015, 13:09. Показов 2243. Ответов 13

Author24 — интернет-сервис помощи студентам
Добрый день. На работе для учёта лицензии надо написать программу выдёргивающую из реестра ключи Windows и Office. Для Windows написал, а вот для Office она же не подходит, ключ не тот показывает. В чём проблемма не пойму

Кому интересно выложу функцию на C#
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public static string Get_Key_MS(RegistryKey KeyToBase64)
        {            
            const int KeyOffset = 52;
            string winKeyOut = string.Empty;
            int last;
            byte[] regKey = (byte[])KeyToBase64.GetValue("DigitalProductId");
            byte isWin8 = (byte)((regKey[66] / 6) & 1);
            regKey[66] = (byte)((regKey[66] & 0xF7) | ((isWin8 & 2) * 4));
            int j = 24;
            string Chars = "BCDFGHJKMPQRTVWXY2346789";
            do
            {
                int cur = 0;
                int y = 14;
                do
                {
                    cur = cur * 256;
                    cur = regKey[y + KeyOffset] + cur;
                    regKey[y + KeyOffset] = (byte)(cur / 24);
                    cur = cur % 24;
                    y--;
                }
                while (y >= 0);
                j--;
                winKeyOut = Chars.Substring(cur, 1) + winKeyOut;
                last = cur;
            }            
            while (j >= 0);
            if (isWin8 == 1)
            {
                string keypart1 = winKeyOut.Substring(1, last);
                char insert = 'N';
                winKeyOut = winKeyOut.Replace(keypart1, keypart1 + insert);
                if (last == 0) winKeyOut = insert + winKeyOut;
            }
            string a = winKeyOut.Substring(1, 5);
            string b = winKeyOut.Substring(6, 5);
            string c = winKeyOut.Substring(11, 5);
            string d = winKeyOut.Substring(16, 5);
            string e = winKeyOut.Substring(21, 5);
            return (a + "-" + b + "-" + c + "-" + d + "-" + e);
        }
Добавлено через 8 минут
Так лучше, а то реестр не закрыл
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public static string Get_Key_MS(RegistryKey KeyToBase64)
        {            
            const int KeyOffset = 52;
            string winKeyOut = string.Empty;
            int last;
            byte[] regKey = (byte[])KeyToBase64.GetValue("DigitalProductId");
            KeyToBase64.Close();
            byte isWin8 = (byte)((regKey[66] / 6) & 1);
            regKey[66] = (byte)((regKey[66] & 0xF7) | ((isWin8 & 2) * 4));
            int j = 24;
            string Chars = "BCDFGHJKMPQRTVWXY2346789";
            do
            {
                int cur = 0;
                int y = 14;
                do
                {
                    cur = cur * 256;
                    cur = regKey[y + KeyOffset] + cur;
                    regKey[y + KeyOffset] = (byte)(cur / 24);
                    cur = cur % 24;
                    y--;
                }
                while (y >= 0);
                j--;
                winKeyOut = Chars.Substring(cur, 1) + winKeyOut;
                last = cur;
            }            
            while (j >= 0);
            if (isWin8 == 1)
            {
                string keypart1 = winKeyOut.Substring(1, last);
                char insert = 'N';
                winKeyOut = winKeyOut.Replace(keypart1, keypart1 + insert);
                if (last == 0) winKeyOut = insert + winKeyOut;
            }
            string a = winKeyOut.Substring(1, 5);
            string b = winKeyOut.Substring(6, 5);
            string c = winKeyOut.Substring(11, 5);
            string d = winKeyOut.Substring(16, 5);
            string e = winKeyOut.Substring(21, 5);
            return (a + "-" + b + "-" + c + "-" + d + "-" + e);
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2015, 13:09
Ответы с готовыми решениями:

В Microsoft больше не дают ключи к Visual Studio 2012 Express for Windows Phone. Есть у кого ключ?
ДИСКЛЕЙМЕР Я понимаю недопустимость пиратства, когда продлевают демо-версии, бесплатно берут...

Пропадают ключи реестра
Что может быть виной, что пропадают ключи реестра или не записываются данные в реестр (кроме...

Переименовать ключи реестра
есть имя параметра реестра стринг task_xxxx- содержит хххх х-0-9. Как сделать так, чтоб...

Как восстановить ключи реестра?
Я не уверенный пользователь пк.-windows XP.Напишите пожалуйста(как проще)пошаговую инструкцию,как...

13
3462 / 2473 / 695
Регистрация: 02.08.2011
Сообщений: 6,711
26.11.2015, 14:45 2
Цитата Сообщение от major94 Посмотреть сообщение
На работе для учёта лицензии надо написать программу выдёргивающую из реестра ключи Windows и Office

Не по теме:

Если в в ваши обязанности входит администрирование сети, то можно просто поискать в инете программы инвентарного учета пк.

0
7 / 7 / 1
Регистрация: 17.02.2012
Сообщений: 46
26.11.2015, 16:41  [ТС] 3
Цитата Сообщение от IamRain Посмотреть сообщение
Если в в ваши обязанности входит администрирование сети, то можно просто поискать в инете программы инвентарного учета пк.
Спасибо за ответ, но это не ответ
0
7 / 7 / 1
Регистрация: 17.02.2012
Сообщений: 46
01.12.2015, 17:12  [ТС] 4
Ясно, ответа можно не ждать. Всем спасибо.
0
0 / 0 / 0
Регистрация: 13.03.2018
Сообщений: 29
10.05.2018, 13:56 5
Подскажите, пожалуйста, как получить значение функции Get_Key_MS.
C#
1
Console.WriteLine(Get_Key_MS.Tostring());
не выходит.
0
Администратор
Эксперт .NET
17026 / 13378 / 5218
Регистрация: 17.03.2014
Сообщений: 27,357
Записей в блоге: 1
10.05.2018, 14:27 6
SilverU, так по идее
C#
1
2
3
4
5
using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"))
{
    Console.WriteLine(Get_Key_MS(key));
}
Требуется
C#
1
using Microsoft.Win32;
1
0 / 0 / 0
Регистрация: 13.03.2018
Сообщений: 29
10.05.2018, 14:59 7
Спасибо за редактирование моего сообщение (в спешке написал), и огромное спасибо за решение!
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
27.09.2022, 00:20 8
Цитата Сообщение от OwenGlendower Посмотреть сообщение
C#
1
2
3
4
5
using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"))
{
    Console.WriteLine(Get_Key_MS(key));
}
У меня ошибку выдаёт на RegistryKey, имя не существует в текущем контексте. Почему так? Я добавил пространство имён
C#
1
using Microsoft.Win32;
0
Администратор
Эксперт .NET
17026 / 13378 / 5218
Регистрация: 17.03.2014
Сообщений: 27,357
Записей в блоге: 1
27.09.2022, 00:52 9
oleg rus, какой у вас тип проекта и под какой .NET?
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
27.09.2022, 00:56 10
Цитата Сообщение от OwenGlendower Посмотреть сообщение
какой у вас тип проекта и под какой .NET?
Ну вообще я делаю игру на Unity какой .NET я не знаю.
0
Администратор
Эксперт .NET
17026 / 13378 / 5218
Регистрация: 17.03.2014
Сообщений: 27,357
Записей в блоге: 1
27.09.2022, 01:07 11
oleg rus, а зачем вам реестр в Unity понадобился?
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
27.09.2022, 11:43 12
Цитата Сообщение от OwenGlendower Посмотреть сообщение
а зачем вам реестр в Unity понадобился?
В Unity используется реестр для сохранения данных игрока, там даже для этих целей есть специальный класс.

Добавлено через 2 минуты
OwenGlendower, Ещё есть вопрос а информация о том какая виндовс установлена тоже в реестре хранится?
0
Администратор
Эксперт .NET
17026 / 13378 / 5218
Регистрация: 17.03.2014
Сообщений: 27,357
Записей в блоге: 1
27.09.2022, 12:28 13
oleg rus, я не спец по Unity, но реестр же вроде не напрямую там используется. Советую создать тему в профильном разделе с этим вопросом.
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
27.09.2022, 13:38 14
OwenGlendower, Хорошо. Спасибо.
0
27.09.2022, 13:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2022, 13:38
Помогаю со студенческими работами здесь

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

Не получается редактировать некоторые ключи реестра
При установке программ (Автокад) выскакивает ошибка 1402 (не может прочитать ключ в реестре),...

Как в установщик добавляют ключи реестра?
если надо к примеру чтобы при установке модифицировался реестр? каким образом это делается? в...

Как прочитать ключи реестра по именам? (с условиями)
Нужно прочитать 4 ключа по именам: key1, key2, key3, key4 Если одного или нескольких ключей нет,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru