Получение текущего чтения CIM_Tachometer для получения текущей скорости вентилятора

Я работаю над проектом, который должен включать статус поклонников компьютера. Большинство свойств, которые мне нужны, можно приобрести у Win32_Fan учебный класс. К сожалению, я не смог найти способ использовать этот класс для получения текущего значения скорости вращения вентилятора. На странице Win32_Fan MSDN в свойстве "DesiredSpeed" упоминается, что текущая скорость определяется датчиком с именем CIM_Tachometer:

DesiredSpeed

Тип данных: uint64

Тип доступа: только для чтения

Qualifiers: Units ("оборотов в минуту")

Запрашиваемая в настоящее время скорость вентилятора, определенная в оборотах в минуту, когда поддерживается вентилятор с переменной скоростью (VariableSpeed ​​равен TRUE). Текущая скорость определяется датчиком (CIM_Tachometer), который связан с вентилятором с использованием отношения CIM_AssociatedSensor.

Это свойство унаследовано от CIM_Fan.

Для получения дополнительной информации об использовании значений uint64 в сценариях см. Сценарии в WMI.

После того, как я увидел это, я искал этот датчик CIM тахометра и нашел следующий фрагмент кода (который был взят с http://wutils.com/wmi/root/cimv2/cim_tachometer/cs-samples.html):

//Project -> Add reference -> System.Management
//using System.Management;

//set the class name and namespace
string NamespacePath = "\\\\.\\ROOT\\cimv2";
string ClassName = "CIM_Tachometer";

//Create ManagementClass
ManagementClass oClass = new ManagementClass(NamespacePath + ":" + ClassName);

//Get all instances of the class and enumerate them
foreach (ManagementObject oObject in oClass.GetInstances())
{
    //access a property of the Management object
    Console.WriteLine("Accuracy : {0}", oObject["Accuracy"]);
}

И поэтому я попытался реализовать это в своем коде:

public static String[] GetFanInfo()
    {
        ManagementClass cSpeed = new ManagementClass
            ("\\\\.\\ROOT\\cimv2:CIM_Tachometer");   //Create ManagementClass for the current speed property
        ManagementObjectSearcher temp = new ManagementObjectSearcher("root\\WMI",
            "SELECT * FROM MSAcpi_ThermalZoneTemperature"); //Create management object searcher for the temperature property
        ManagementObjectSearcher mos = new ManagementObjectSearcher
            ("SELECT * FROM Win32_Fan"); //Create a management object searcher for the other properties
        string[] Id = new string[8]; //Preparig  a string array in which the results will be returned
        Id[0] = "Fan"; //First value is the category name
        foreach (ManagementObject mo in mos.Get())
        {

            Id[1] = mo["Name"].ToString(); //Name of the component
            Id[2] = mo["Status"].ToString(); //Component's status
            long vel = Convert.ToInt64(mo["DesiredSpeed"]); //Desired speed of the component
            Id[4] = Convert.ToString(vel); 
            bool s = Convert.ToBoolean(mo["variableSpeed"]); //Wheater or not variable speed are supported
            Id[5] = s.ToString();
            break;
        }
        foreach (ManagementObject obj in temp.Get())
        {
            Double temperature = Convert.ToDouble(obj["CurrentTemperature"].ToString()); //Fetching the temperature
            Id[3] = Convert.ToString((temperature - 2732) / 10.0) + " C";
        }
        foreach (ManagementObject sObject in cSpeed.GetInstances()) //Get all instances of the class and enumerate them
        {
            Id[7] = sObject["CurrentReading"].ToString(); //Getting the current reading
        }
        return Id;
    }

К моему удивлению, кажется, что весь раздел текущего чтения пропускается во время выполнения. произойдет в любом случае!

Мой вопрос: почему эта определенная часть пропущена? Является ли тахометр датчиком, который нельзя использовать? это по какой-то причине отключено?

Спасибо вперед.

PS

Я пишу программу в Microsoft Visual Studio 2015, используя winforms для пользовательского интерфейса.

0 ответов

Другие вопросы по тегам