2015-03-28 4 views
-3

Я работаю над проектом, который будет читать температуру процессора. К сожалению, я получаю ошибку преобразования. Все это без проблем. Но когда я на самом деле пытаюсь выполнить код, он дает мне эту ошибку: «Не удалось преобразовать вариант типа (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) 
+1

Метод ExecQuery возвращает набор объектов, а не строку. – TLama

+1

Еще раз вам нужно потратить некоторое время на анализ кода, который вы получили с помощью MagWMI, который показывает вам ** точно **, как это делать. Вы явно не можете превратить 'Dispatch' в' string', потому что 'Dispatch' - это интерфейс для достижения других вещей. У вас есть исчерпывающий, подробный пример, доступный вам, что Angus написал для MagWMI - я не понимаю, почему вы не потратите некоторое время, фактически глядя на него, чтобы научиться чему-то. Было бы намного быстрее (и проще), чем размещать здесь и ждать. –

+0

Вы правы, к сожалению, я не знаю, что я ищу. Это делает обучение довольно сложным. – CSharp

ответ

1

Прежде чем продолжить на этом пути, может быть, вы должны прочитать документацию Win32_TemperatureProbe class.

В заголовке вы можете прочитать:.. «Большую часть информации, что класс Win32_TemperatureProbe WMI Предоставляет вам есть из SMBIOS чтения в режиме реального времени для свойства CurrentReading не может быть извлечен из таблиц SMBIOS По этой причине тока реализация WMI не заполняет свойство CurrentReading. Присутствие свойства CurrentReading зарезервировано для использования в будущем ».

Если вы хотите правильно использовать WMI, вы можете найти много информации о the website of Rodrigo Ruz или on my website, включая образцы и конкретные компоненты для WMI (GLibWMI on Sourceforge).

Для доступа к свойствам оборудования (включая те, которые вам нужны) есть интересный проект (opensource) в http://openhardwaremonitor.org. Проверьте это.

enter image description here

приветствие.

Смежные вопросы