-
Windows 10 Chrome 124.0.0.0
- #1
获取CPU型号:
GetCPUModel:
-- 导入 FFI 库,并确保其可用,如果不可用则抛出错误信息
local ffi = assert(ffi, "请在 Lua 安全设置中启用 FFI")
-- 使用 FFI 定义一系列 C 数据类型和函数签名
ffi.cdef[[
typedef unsigned long DWORD;
typedef unsigned char BYTE;
typedef int BOOL;
typedef const char* LPCSTR;
typedef void* HKEY;
typedef HKEY* PHKEY;
DWORD RegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, DWORD samDesired, PHKEY phkResult);
DWORD RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, DWORD* lpReserved, DWORD* lpType, BYTE* lpData, DWORD* lpcbData);
DWORD RegCloseKey(HKEY hKey);
]]
-- 将 HKEY_LOCAL_MACHINE 常量转换为 HKEY 类型
local HkeyLocalMachine = ffi.cast("HKEY", ffi.cast("intptr_t", 0x80000002))
-- 定义用于查询值的选项常量
local KeyQueryValue = 0x0001
-- 定义获取 CPU 型号的函数
local function GetCpuModelWindows()
local RegKey = ffi.new("HKEY[1]") -- 创建用于存储注册表键的数组
local Result = ffi.C.RegOpenKeyExA(HkeyLocalMachine, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", 0, KeyQueryValue, RegKey) -- 打开注册表键
if Result ~= 0 then -- 如果打开失败
return nil -- 返回空值
end
local BufferSize = ffi.new("DWORD[1]", 256) -- 创建用于存储数据大小的数组
local Buffer = ffi.new("BYTE[256]") -- 创建用于存储数据的数组
Result = ffi.C.RegQueryValueExA(RegKey[0], "ProcessorNameString", nil, nil, Buffer, BufferSize) -- 查询注册表值
ffi.C.RegCloseKey(RegKey[0]) -- 关闭注册表键
if Result ~= 0 then -- 如果查询失败
return nil -- 返回空值
end
return ffi.string(Buffer, BufferSize[0] - 1) -- 返回 CPU 型号字符串
end
-- 打印 CPU 型号
print("CPU:" .. GetCpuModelWindows())