Чудеса Wmi
var
Service: ISWbemServices;
ObjectSet: ISWbemObjectSet;
SObject: ISWbemObject;
PropSet: ISWbemPropertySet;
SProp: ISWbemProperty;
PropEnum, Enum: IEnumVariant;
TempObj: OleVariant;
Value: Cardinal;
StrValue: string;
begin
Service:= SWbemLocator1.ConnectServer('.', 'root\CIMV2', '', '', '',
'', 0, nil);
SObject:= Service.Get('Win32_Processor', wbemFlagUseAmendedQualifiers, nil);
ObjectSet:= SObject.Instances_(0, nil);
Enum:= (ObjectSet._NewEnum) as IEnumVariant;
Enum.Next(1, TempObj, Value);
SObject:= IUnknown(TempObj) as SWBemObject;
PropSet := SObject.Properties_;
PropEnum := (PropSet._NewEnum) as IEnumVariant;
while (PropEnum.Next(1, TempObj, Value) = S_OK) do
begin
SProp:= IUnknown(TempObj) as SWBemProperty;
StrValue:= '';
if (SProp.Get_Value <> null) then
begin
with SProp do
begin
if Name = 'Name' then
Label2.Caption:= Get_Value
else if Name = 'Manufacturer' then
Label4.Caption:= Get_Value
end
end;
end;
end;
А в каком месте ругается?
if (SProp.Get_Value <> null)
Цитата:
Originally posted by egn_victor
if (SProp.Get_Value <> null)
if (SProp.Get_Value <> null)
Так нельзя же вроде так писать. Надо бы:
if not VarIsNull(SProp.Get_Value)
Цитата:
Originally posted by egn_victor
if (SProp.Get_Value <> null)
if (SProp.Get_Value <> null)
Попробуй этот кусок внутри while (PropEnum.Next(1, TempObj, Value) = S_OK) do
в try except взять, там возможно пропертя "вредная попадается, если другие получишь - бага в конвертации.
А какого типа .Get_Value ? (у меня просто доков нет)
Цитата:
Originally posted by smartsoft
Так нельзя же вроде так писать. Надо бы:
if not VarIsNull(SProp.Get_Value)
Так нельзя же вроде так писать. Надо бы:
if not VarIsNull(SProp.Get_Value)
Дык там видать не Variant возвращается, Variant делфя вообще не дает с nil сравнивать. (Хотя попробовать можно, хуже точно не будет :))
Может Get_Value строкой возвращает значение?
Всем большое спасибо. Помогло: if not VarIsNull(SProp.Get_Value)
Цитата:
Originally posted by egn_victor
Всем большое спасибо. Помогло: if not VarIsNull(SProp.Get_Value)
Всем большое спасибо. Помогло: if not VarIsNull(SProp.Get_Value)
Дык это еще со времен баз данных идет. Значение NULL нельзя сравнивать ни с каким значением, в том числе и NULL. В вариантах - аналогично.