Войти

Показать полную графическую версию : Батник который бы определял состояние активации виндовс


angel_lyucifer
13-02-2013, 00:10
Привет, нужен универсальный батник который бы определял состояние активации виндовс если система активирована тогда запустить файл 1.ехе а если система не активирована тогда запустить файл 2.ехе.

Нет это не связано с активацией, я пишу не большую программу для людей с ограниченными возможностими.
Если система активирована тогда будет одно определённое голосовое оповещение а если система не активирована тогда будет другое голосовое определённое оповещение...

Помогите пожалуйста.

Gen_prot
23-03-2013, 19:04
думаю что то вроде
:: запишем вывод команды проверки лицензии в файл
cscript %windir%\system32\slmgr.vbs -xpr >win_act.txt
:: поищем "Постоянная активация прошла успешно."
Find /C "успешно" win_act.txt
:: не нашли, то запустить Finish1
If ErrorLevel 1 Call Finish1.CMD
:: иначе
If ErrorLevel 0 Call Finish2.CMD

angel_lyucifer
24-03-2013, 13:27
:: запишем вывод команды проверки лицензии в файл
cscript %windir%\system32\slmgr.vbs -xpr >win_act.txt
:: поищем "Постоянная активация прошла успешно."
Find /C "успешно" win_act.txt
:: не нашли, то запустить Finish1
If ErrorLevel 1 Call Finish1.CMD
:: иначе
If ErrorLevel 0 Call Finish2.CMD

В моей os нет такого скрипта slmgr.vbs...

Foreigner
24-03-2013, 15:09
angel_lyucifer, В общем случае можно так:

wmic path SoftwareLicensingProduct get licensestatus | 1>nul findstr "1" && echo Licensed || echo Not Licensed

Подробнее (http://msdn.microsoft.com/en-us/library/windows/desktop/cc534596%28v=vs.85%29.aspx)

sov44
24-03-2013, 17:51
Foreigner, можно написать универсальный код для определения статуса активации Windows XP \ Windows7 ?

Foreigner
24-03-2013, 18:38
sov44, Не знаю будет работать или нет:

@echo off
setlocal

for /f %%i in (' wmic os get version /value ') do 1>nul set "%%i"

if %version% gtr 5.3 (

wmic path SoftwareLicensingProduct get LicenseStatus | 1>nul findstr "1" && echo Licensed || echo Not Licensed

) else (

wmic path Win32_WindowsProductActivation get ActivationRequred | findstr "0" && echo Licensed || echo Not Licensed

)


ЗЫ. В ХР Номе работать не будет точно, если пользователь не установит wmic

Dragokas
24-03-2013, 23:19
Foreigner, пропустили букву i (Required)
wmic path Win32_WindowsProductActivation get ActivationRequired | findstr "0" && echo Licensed || echo Not Licensed

Dragokas
26-03-2013, 02:19
%version% gtr 5.3

Как это работает?

Сравнение по кодовой таблице символов?

mammuthus
22-05-2015, 10:33
Как можно вывести в консоль ключ активации, если винда активирована?
И можно ли как-нибудь проверить активацию msoffice таким же методом?

greg zakharov
22-05-2015, 12:20
Как можно вывести в консоль ключ активации, если винда активирована?Например, так:@set @pk=0 /*
@echo off
set @pk=
cscript /nologo /e:jscript "%~f0" "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"
exit /b
*/

(function(key) {
var i, j, res = '',
map = 'BCDFGHJKMPQRTVWXY2346789'.split('');

with (new ActiveXObject('WScript.Shell')) {
key = RegRead(key).toArray().slice(52, 67);
}

for (i = 24; i >= 0; i--) {
var k = 0;
for (j = 14; j >= 0; j--) {
k = (k << 8) + key[j];
key[j] = (k / 24) & 255;
k %= 24;
}
res = map[k] + res;
if ((i % 5) === 0 && i !== 0) res = '-' + res;
}

WScript.echo(res);
}(
WScript.Arguments.length !== 1
? WScript.Quit(1)
: WScript.Arguments.Unnamed(0)
));
И можно ли как-нибудь проверить активацию msoffice таким же методом?Можно. Можно даже в WMI не лезть, так как DigitalProductId содержит все необходимые сведения - чай ведь структура данных об активации продукта m$.

greg zakharov
26-05-2015, 12:02
В общем виде более детальная информация об активации (берется из значений DigitalProductId и DigitalProductId4, некоторые из полей структур отправлены в /dev/null).@set @lic=0 /*
@echo off
set @lic=
cscript /nologo /e:jscript "%~f0"
exit /b
*/

(function() {
Array.prototype.getString = function(b, e) {
return String.fromCharCode.apply(null, this.slice(b, e));
}

Array.prototype.getCdKey = function(b, e) {
var i, j, key = '', raw = this.slice(b, e),
map = 'BCDFGHJKMPQRTVWXY2346789'.split('');

for (i = 24; i >= 0; i--) {
var k = 0;
for (j = 14; j >= 0; j--) {
k = (k << 8) + raw[j];
raw[j] = (k / 24) & 255;
k %= 24;
}
key = map[k] + key;
if ((i % 5) === 0 && i !== 0) key = '-' + key;
}

return key;
}

Array.prototype.getUString = function(b, e) {
var arr = this.slice(b, e);

for (var i = 0; i < arr.length; i++) {
if (arr[i] === 0) arr.splice(i, 1);
}

return String.fromCharCode.apply(null, arr);
}

var key = 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\DigitalProductId',
dpi, dpi4;

try {
with (new ActiveXObject('WScript.Shell')) {
dpi = RegRead(key).toArray();
dpi4 = RegRead(key + 4).toArray();
}

WScript.echo('ProductId : ' + dpi.getString(9, 31));
WScript.echo('EditionId : ' + dpi.getString(36, 45));
WScript.echo('CdKey : ' + dpi.getCdKey(52, 67));
WScript.echo('AdvancedId : ' + dpi4.getUString(8, 135));
WScript.echo('ActivationId : ' + dpi4.getUString(136, 263));
WScript.echo('EditionType : ' + dpi4.getUString(280, 600));
WScript.echo('KeyType : ' + dpi4.getUString(1016, 1143));
WScript.echo('EULA : ' + dpi4.getUString(1144, 1272));
}
catch (e) {
WScript.echo(e.message);
}
}());накидал на скорую руку, пока было время, так что допиливание о оптимизация - дело конечного пользователя.

greg zakharov
28-05-2015, 13:03
Напоследок (может кому пригодится). Набросал на Си консольное приложение pk.exe (от product key). Если закинуть в одну из директорий переменной %path% удобно дампить данные об активации из батников. Например:@echo off
setlocal
for /f "tokens=2* delims=:" %%i in (
'pk ^| findstr /i eula'
) do set "eula=%%i"
echo %eula: =%
endlocal
exit /bВ архиве помимо прочего описание структур DigitalProductId и DigitalProductId4.




© OSzone.net 2001-2012