//系统版本信息
//相关范例: 范例\COM 组件\WMI\获取系统信息;范例\操作系统\硬件信息\查询硬件信息  
import console;
import process;
import sys.info;
import win.version;

//用 win.version 获取系统版本
console.dump(win.version);
console.more(1,true);

//用 win.version 检测系统版本号
if( win.version.majorVersion >= 6 ){
	var result = {int type}
	var ret = Kernel32.GetProductInfo(win.version.majorVersion,..win.version.minorVersion,0,0,result);
	//console.dump(result);//请自行搜索相关资料
}

//使用 aardio 提供的全局常量检测系统版本，这种方法最快
console.log( _WIN10_LATER ? "WIN10以上系统" : "WIN10以下系统")
console.log( _WIN7_LATER ? "WIN7以上系统" : "WIN7以下系统")
console.log( _WINXP ? "WIN XP" : "XP以上系统")
console.log( _WINE ? "WINE" : "非 WINE 环境")
console.more(1,true);

/*
import win.versionVerify;
console.log(win.versionVerify.isWin7Later())
*/

console.log("用 NetWkstaGetInfo 获取系统版本")
::NetApi32 :=  raw.loadDll("NetApi32")
var info = {pointer ptr}
::NetApi32.NetWkstaGetInfo( null,100,info) 
var versionInfo = raw.convert(info.ptr,{
  INT platformId; // PLATFORM_ID_NT 500 总是这个值
  ustring computername;
  ustring langroup;
  INT verMajor;
  INT verMinor;
});
console.dumpJson(versionInfo);
console.more(1,true);

console.log("用 RtlGetNtVersionNumbers 获取系统版本")
var getVersionNumbers = function(){
	var ret,major,minor,build = ::Ntdll.RtlGetNtVersionNumbers({INT value},{INT value},{INT value})
	return major.value,minor.value,build.value & 0xFFFF;//buildNumber高位总是0xF000,无意义
}
console.log( getVersionNumbers() )
console.more(1,true)

console.log( "是否64位",_WIN_64, process().isWow64(),sys.info().isX64() );

if( 1 == ::Kernel32.GetFirmwareEnvironmentVariableW(
	"","{00000000-0000-0000-0000-000000000000}",null,0) 
	){
	console.log("系统使用传统BIOS启动")
}
else {
	console.log("系统使用UEFI启动")
}

console.more(1)



::Secur32 := raw.loadDll("Secur32")
getUserNameEx = function(format){ 
    var name = ..raw.buffer(0x202);
	if( ::Secur32.GetUserNameExW(format,name,{INT size=0x101}) ) return ..string.fromUnicode(name,,-1);
}

import sys;
console.log("登录用户名：",sys.getUserName())
console.log("登录用户显示名称(Full Name / Display Name)：",getUserNameEx(3/*NameDisplay*/))
console.log("登录用户域名称：",getUserNameEx(2/*NameSamCompatible*/))

import com.wmi;
import win.reg;
getProductKey = function(){
 
	var productKey = com.wmi.get("softwarelicensingservice","OA3xOriginalProductKey");
	if(productKey) return productKey;

	return win.reg.queryWow64( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform"
		,"BackupProductKeyDefault" ) 
}

console.log("安装序列号" ,getProductKey() );

console.pause();