function System_Class() {
this.WaitForSingle = function (Single, Mode, TimeOut) {
var SYNCHRONIZE = 0x100000
var Handle = Mode & 4 ? Single : Api.ECall("kernel32", "OpenProcess", SYNCHRONIZE, 0, Single)
if (!Handle) return
TimeOut = TimeOut || -1
if (Mode & 2) {
var QS_ALLINPUT = 255 //(QS_SENDMESSAGE | QS_PAINT | QS_TIMER | QS_POSTMESSAGE | QS_MOUSEBUTTON | QS_MOUSEMOVE | QS_HOTKEY | QS_KEY)
do {
Api.iDoEvents()
Single = Api.ECall("user32", "MsgWaitForMultipleObjects", 1, Api.VarPtr(Handle) + 8, false, TimeOut, QS_ALLINPUT)
} while (Single != 0 && Single != 258)
} else {
Single = Api.ECall("kernel32", "WaitForSingleObject", Handle, TimeOut)
}
if (Mode & 4 == 0) Api.ECall("kernel32", "CloseHandle", Handle)
return Single
}
this.ShutDown = function (seconds) {
Api.Shell("shutdown -f -s -t " + seconds)
}
this.ShutDownEx = function (Mode) {
Mode = Mode || 0 //SHUTDOWN = 0 RESTART = 1 POWEROFF = 2
var SE_SHUTDOWN_PRIVILEGE = 19
var i = parseInt(0)
Api.ECall("ntdll", "RtlAdjustPrivilege", SE_SHUTDOWN_PRIVILEGE, 1, 0, Api.VarPtr(i) + 8) //提权
Api.ECall("ntdll", "NtShutdownSystem", Mode)
}
this.Version = function () {
var Ver = Api.Malloc(147)
Ver.SetVal(0, 4)=148
Api.ECall("ntdll", "RtlGetVersion", Ver.GetPtr(0))
return Ver.Read(4, 4) + "." + Ver.Read(8, 4) + "." + Ver.Read(12, 4)
}
this.VersionEx = function () { //不受软件设置兼容影响
var Ver = Api.Malloc(11)
Api.ECall("ntdll", "RtlGetNtVersionNumbers", Ver.GetPtr(0), Ver.GetPtr(4), Ver.GetPtr(8))
return Ver.Read(0, 4) + "." + Ver.Read(4, 4) + "." + (Ver.Read(8, 4) & 0xFFFF)
}
this.IsUserAnAdmin = function () {
return Api.ECall("Shell32", "IsUserAnAdmin")
}
this.Is64Bit = function () {
var Ver = Api.Malloc(3)
Api.ECall("kernel32", "IsWow64Process", Api.ECall("kernel32", "GetCurrentProcess"), Ver.GetPtr(0))
return Ver.Read(0, 4)
}
this.CPUID = function () {
var Asm = Api.Malloc()
Asm.AddEx(0, 85, 139, 236, 129, 236, 192, 0, 0, 0, 83, 86, 87, 141, 189, 64, 255, 255, 255, 185, 48, 0, 0, 0,
184, 204, 204, 204, 204, 243, 171, 184, 0, 0, 0, 0, 51, 210, 15, 162, 137, 85, 252, 137, 69, 248, 184, 1, 0, 0, 0,
51, 201, 51, 210, 15, 162, 137, 85, 244, 137, 69, 240, 139, 69, 252, 137, 69, 236, 139, 69, 248, 137, 69, 232, 139,
69, 244, 137, 69, 228, 139, 69, 240, 137, 69, 224, 141, 69, 236, 95, 94, 91, 139, 229, 93, 195)
var ptr = Api.ECall("user32.dll", "CallWindowProcA", Asm.GetPtr(0), 0, 0, 0, 0)
var Mem = new Array()
for (i = 0; i <= 12; i += 4) {
Asm = Api.ReadMem(ptr + i)
if (Asm < 0) Asm += 0x100000000
Mem.push(Asm.toString(16))
}
return Mem.join(" ").toUpperCase()
}
this.DPI = function () {
return Api.ECall("gdi32", "GetDeviceCaps", Api.ECall("user32", "GetDC", 0), 88)
}
this.Volume = function (Vol) {
var WM_APPCOMMAND = 0x319
var APPCOMMAND_VOLUME_UP = 10
var APPCOMMAND_VOLUME_DOWN = 9
var APPCOMMAND_VOLUME_MUTE = 8
return Api.ECall("user32", "SendMessageA", Globals("Form").hwnd, WM_APPCOMMAND, Vol ? 0x30292 : 0x200EB0,
0x10000 * (Vol > 0 ? APPCOMMAND_VOLUME_UP : Vol < 0 ? APPCOMMAND_VOLUME_DOWN : APPCOMMAND_VOLUME_MUTE))
}
this.Shell = function (PathName, WindowStyle, TimeOut) {
var Shell = Api.Shell(PathName, WindowStyle % 0x10)
WindowStyle = parseInt(WindowStyle / 0x10)
if (WindowStyle) {
return this.WaitForSingle(Shell, WindowStyle, TimeOut)
}
}
this.SetProcessLive = function (Pid, Live, Mode) {
if (Mode & 1) {
var mPid = Api.Malloc(3)
Api.ECall("user32", "GetWindowThreadProcessId", Pid, mPid.GetPtr(0))
Pid = mPid.Read(0, 4)
}
var Handle = Api.ECall("kernel32", "OpenProcess", 512, 0, Pid)
if (Handle) {
Api.ECall("kernel32", "SetPriorityClass", Handle, [64, 16384, 32, 32768, 128, 256][Live])
Api.ECall("kernel32", "CloseHandle", Handle)
}
}
}