Может так подойдёт? :
function GetWMIObject(const objectName: String): IDispatch;
var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;
procedure TForm2.SpeedButton1Click(Sender: TObject);
var
objWMIService : OLEVariant;
colItems : OLEVariant;
colItem : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin
objWMIService := GetWMIObject('winmgmts:\\localhost\root\CIMV2');
colItems := objWMIService.ExecQuery('SELECT * FROM Win32_DesktopMonitor','WQL',0);
oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
if oEnum.Next(1, colItem, iValue) = 0 then
begin
Memo1.Lines.Add('Подпись '+(colItem.Caption));
Memo1.Lines.Add('Описание '+(colItem.Description));
Memo1.Lines.Add('Идентификатор устройства '+(colItem.DeviceID));
Memo1.Lines.Add('Manufacturer '+(colItem.MonitorManufacturer));
Memo1.Lines.Add('Тип '+(colItem.MonitorType));
end;
end;