![]() |
|
|
#1
|
|||
|
|||
|
Пытаюсь создать программу,которая выводит данные о железе ,но весь процесс встал на процессоре. Данную работу делаю через WMI
выдаёт пару ошибок,всё перерыл ничего не нашёл ![]() Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.OleServer, WbemScripting_TLB, ActiveX,
Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls, Vcl.CheckLst;
type
TForm1 = class(TForm)
SWbemLocator1: TSWbemLocator;
BitBtn1: TBitBtn;
CheckListBox1: TCheckListBox;
LinkLabel1: TLinkLabel;
procedure BitBtn1Click(Sender: TObject);
procedure ShowProp(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
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 := '';
CheckListBox1.AddItem(SProp.Name, nil);
ShowProp(SProp);
end;
end;
procedure TForm1.ShowProp(SProp: SWBemProperty);
begin
if (SProp.Get_Value < > null) then
begin
with SProp do
begin
if Name = 'Name' then
Label1.Caption := Get_Value
else if Name = 'Manufacturer' then
….
end;
end;
end;
end.
Код:
ShowProp(SProp); - Incompatible types: 'TObject' and 'ISWbemProperty' Код:
if (SProp.Get_Value < > null) then - ')' expected but identifier 'lt' found Код:
procedure TForm1.ShowProp(SProp: SWBemProperty);- Declaration of 'ShowProp' differs from previous declaration |
|
#2
|
|||
|
|||
|
строка 67-
if (SProp.Get_Value < > null) then - ')' expected but identifier 'lt' found Ну сам понял, что написал? Скопировал код с какого-то сайта, и не заметил, что код в редакторе IDE не похож на тот, что показывает браузер. Строка 65 Declaration of 'ShowProp' differs from previous declaration дословные перевод объявление 'ShowProp' отличается от предыдущего объявления (предыдущее объявление - в строке 18) ну и Incompatible types: 'TObject' and 'ISWbemProperty' - должно пропасть, если исправишь предыдущую ошибку |
|
#3
|
||||
|
||||
|
Банить надо за такие заголовки тем.
|
|
#4
|
||||
|
||||
|
полностью рабочий кусок из Просмотрщик Windows Management Instrumentation (WMI) Win32 классов:
Код:
var
objLocator: Variant;
objServices: Variant;
objObjectSet: Variant;
EnumSet: IEnumVariant;
SetVar: OleVariant;
Fetched: LongWord;
EnumProp: IEnumVariant;
PropVar: OleVariant;
ListItem: TListItem;
begin
ListView.Items.BeginUpdate;
try
objLocator:=CreateOleObject('WbemScripting.SWbemLocator');
objServices:=objLocator.ConnectServer('', 'root\CIMV2');
objObjectSet:=objServices.ExecQuery('select * from Win32_Processor');
EnumSet:=IUnknown(objObjectSet._NewEnum) as IEnumVariant;
while EnumSet.Next(1, SetVar, Fetched)=S_OK do
begin
EnumProp:=IUnknown((IUnknown(SetVar) as ISWbemObject).Properties_._NewEnum) as IEnumVariant;
while EnumProp.Next(1, PropVar, Fetched)=S_OK do
begin
ListItem:=ListView.Items.Add;
ListItem.Caption:=(IUnknown(PropVar) as ISWbemProperty).Name;
ListItem.SubItems.Add(VarToStr((IUnknown(PropVar) as ISWbemProperty).Get_Value));
end;
end;
finally
ListView.Items.EndUpdate;
end;
end; |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
KORSA_MC (07.05.2013)
| ||
|
#5
|
|||
|
|||
|
Спасибо всем и не надо ругаться)) я же на Компьютерные сети учусь,а тут курсачь по делфи дали делать)
|