如何在Delphi 11中不依赖第三方单元获取处理器名称
在Delphi 11中无需第三方组件获取Windows「系统>关于」中的处理器名称
完全可以借助Delphi 11自带的RTL/VCL单元和Windows API实现,无需任何第三方组件。以下提供两种可靠的实现方式:
方法1:通过注册表读取
Windows会将处理器名称存储在系统注册表的固定路径中,直接读取即可获取和「系统>关于」一致的内容:
uses Winapi.Windows, System.SysUtils, System.Win.Registry; function GetProcessorName: string; var Reg: TRegistry; begin Result := ''; Reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY); // 兼容32位程序在64位系统运行 try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKeyReadOnly('HARDWARE\DESCRIPTION\System\CentralProcessor\0') then begin if Reg.ValueExists('ProcessorNameString') then Result := Trim(Reg.ReadString('ProcessorNameString')); Reg.CloseKey; end; finally Reg.Free; end; end;
说明
- 添加
KEY_WOW64_64KEY参数是为了让32位编译的程序能正确读取64位系统的注册表分支,避免获取到错误的简化版处理器名称。 - 该方法执行速度快,不依赖额外系统服务。
方法2:通过WMI查询
使用Windows Management Instrumentation(WMI)查询官方硬件信息类,获取的Name属性与「系统>关于」显示内容完全一致:
uses Winapi.Windows, System.SysUtils, System.Win.ComObj; function GetProcessorName: string; var WbemLocator: OLEVariant; WmiService: OLEVariant; ProcessorSet: OLEVariant; Processor: OLEVariant; Enum: IEnumvariant; FetchResult: LongWord; begin Result := ''; try WbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); WmiService := WbemLocator.ConnectServer('localhost', 'root\CIMV2', '', ''); ProcessorSet := WmiService.ExecQuery('SELECT Name FROM Win32_Processor', 'WQL', 0); Enum := IUnknown(ProcessorSet._NewEnum) as IEnumvariant; if Enum.Next(1, Processor, FetchResult) = 0 then begin Result := Trim(Processor.Name); Processor := Unassigned; end; except // 捕获COM相关异常,比如WMI服务未启动的情况 end; end;
说明
- WMI是Windows官方的硬件/系统信息查询接口,兼容性好,除了处理器名称外还能获取更多硬件参数。
- 需确保系统WMI服务(Winmgmt)处于运行状态,默认系统均已开启。
内容的提问来源于stack exchange,提问作者delphirules
相关产品推荐
相关产品推荐

