2016-05-25 5 views
1

Delphiを使用してWindowsレジストリからBIOSバージョンを取得しようとしています。私の問題は、サブキーのパスがすべてのWindowsバージョンで同じではないということです。Windowsレジストリのキーを見つけるには?

Windowsの10:Reg.OpenKey('\HARDWARE\DESCRIPTION\SYSTEM\BIOS',False)

のWindows 7:

Reg.OpenKey('\HARDWARE\DESCRIPTION\SYSTEM',False)は、それへのパスが実際は何でもBIOSのバージョンを検索する方法はありますか?

+0

あなたのアプローチのような音が間違っています。なぜWMIを使用しないのですか? –

+0

私はそれを調べます。 – yazid

+0

[Win32_BIOS wmi class](https://msdn.microsoft.com/en-us/library/aa394077.aspx)を参照してください。 –

答えて

1

Windows Vistaからは、Win32_BIOS WMIクラスを使用してBIOSバージョンを取得できます。このサンプルコードを試してください。

{$APPTYPE CONSOLE} 

{$R *.res} 

uses 
    System.SysUtils, 
    Winapi.ActiveX, 
    System.Win.ComObj, 
    System.Variants; 



procedure GetWin32_BIOSInfo; 
const 
    WbemUser   =''; 
    WbemPassword  =''; 
    WbemComputer  ='localhost'; 
    wbemFlagForwardOnly = $00000020; 
var 
    FSWbemLocator : OLEVariant; 
    FWMIService : OLEVariant; 
    FWbemObjectSet: OLEVariant; 
    FWbemObject : OLEVariant; 
    oEnum   : IEnumvariant; 
    iValue  : LongWord; 
begin; 
    FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); 
    FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword); 
    FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_BIOS','WQL',wbemFlagForwardOnly); 
    oEnum   := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; 
    while oEnum.Next(1, FWbemObject, iValue) = 0 do 
    begin 
    Writeln(Format('SerialNumber   %s',[String(FWbemObject.SerialNumber)])); 
    Writeln(Format('SMBIOSBIOSVersion %s',[String(FWbemObject.SMBIOSBIOSVersion)])); 
    Writeln(Format('Version    %s',[String(FWbemObject.Version)])); 

    Writeln(''); 
    FWbemObject:=Unassigned; 
    end; 
end; 


begin 
try 
    CoInitialize(nil); 
    try 
     GetWin32_BIOSInfo; 
    finally 
     CoUninitialize; 
    end; 
except 
    on E:EOleException do 
     Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode])); 
    on E:Exception do 
     Writeln(E.Classname, ':', E.Message); 
end; 
Writeln('Press Enter to exit'); 
Readln; 
end. 
関連する問題