Я работаю над проектом, который будет читать температуру процессора. К сожалению, я получаю ошибку преобразования. Все это без проблем. Но когда я на самом деле пытаюсь выполнить код, он дает мне эту ошибку: «Не удалось преобразовать вариант типа (Dispatch) в тип (String)»WMI with delphi
Я на самом деле не пытаюсь получить Temp, на этом бите Я просто смотрю, работает ли этот код. Temp часть будет добавлена позже ...
Конкретный код:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, jpeg, WbemScripting_TLB, StdCtrls;
type
TForm3 = class(TForm)
MainMenu1: TMainMenu;
F1: TMenuItem;
Quit1: TMenuItem;
Help1: TMenuItem;
Programms1: TMenuItem;
CalCulator1: TMenuItem;
Browser1: TMenuItem;
emperature1: TMenuItem;
WallPad1: TMenuItem;
MediaPlayer1: TMenuItem;
Image1: TImage;
Image2: TImage;
Load1: TMenuItem;
Background1: TMenuItem;
Label1: TLabel;
Button1: TButton;
procedure CalCulator1Click(Sender: TObject);
procedure Image1DblClick(Sender: TObject);
procedure Browser1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure MediaPlayer1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
WMIServices: ISWbemServices;
Root : ISWbemObjectSet;
Item : Variant;
I : Integer;
implementation
uses Unit4, Unit2, Unit5;
{$R *.dfm}
procedure TForm3.Browser1Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil);
Root := WMIServices.ExecQuery('Select DeviceID FROM Win32_TemperatureProbe','WQL', 0, nil);
Label1.caption := VarToStr(Root)
end;
procedure TForm3.CalCulator1Click(Sender: TObject);
begin
form4.show;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
image1.bringtofront
end;
procedure TForm3.Image1DblClick(Sender: TObject);
begin
Form4.show;
end;
procedure TForm3.MediaPlayer1Click(Sender: TObject);
begin
form5.show;
end;
end.
Я предполагаю, что решение будет довольно простой, но я не могу видеть его ...
ошибка создается на этот бит
Label1.caption := VarToStr(Root)
Метод ExecQuery возвращает набор объектов, а не строку. – TLama
Еще раз вам нужно потратить некоторое время на анализ кода, который вы получили с помощью MagWMI, который показывает вам ** точно **, как это делать. Вы явно не можете превратить 'Dispatch' в' string', потому что 'Dispatch' - это интерфейс для достижения других вещей. У вас есть исчерпывающий, подробный пример, доступный вам, что Angus написал для MagWMI - я не понимаю, почему вы не потратите некоторое время, фактически глядя на него, чтобы научиться чему-то. Было бы намного быстрее (и проще), чем размещать здесь и ждать. –
Вы правы, к сожалению, я не знаю, что я ищу. Это делает обучение довольно сложным. – CSharp