PDA

View Full Version : بدست آوردن دمای CPU



application_13
جمعه 14 دی 1386, 22:22 عصر
سلام به تمامی دوستان.
چطوری میشه دمای cpu رو بدست بیاریم؟ یه تاپیک در این مورد بود. ولی فقط برای مادربورد Asuse بود. میشه کاری کرد که هر cpu ای بود دماشو بدست بیاریم؟

hassan razavi
جمعه 14 دی 1386, 22:35 عصر
SelectQuery myQuery = new SelectQuery("SELECT CurrentReading from Win32_TemperatureProbe");
ManagementObjectSearcher mySearcher = new ManagementObjectSearcher(myQuery);

foreach (ManagementBaseObject obj in mySearcher.Get())
{
Console.Write("Temp: " + obj["CurrentReading"]);
}

application_13
جمعه 14 دی 1386, 22:49 عصر
این کد رو امتحان کردم ولی از selectquery , ManagementObjectSearcher ایراد میگیره. میشه کمی توضیح بدید؟
من این کد هارو تو consol نوشتم.
شایدم فضای نامی داره که من نمیدونم.

hassan razavi
جمعه 14 دی 1386, 22:53 عصر
در قسمت Reference گزینه های System.Managment و System.Managment.Instrumentation رو از برگه .Net انتخاب و Add کنید.

application_13
جمعه 14 دی 1386, 22:58 عصر
باز هم همون ایراد رو میگیره.
من این کد رو داخل void main در consol میزنم. درسته؟

application_13
جمعه 14 دی 1386, 23:07 عصر
مشکل خطاها رفع شد. مشکل این بود که از using استفاده نکردم.
حالا اجرا میشه. ولی چیزی نمایش نمیده.
منظورم عددی چیزی.

Amir Oveisi
شنبه 15 دی 1386, 00:19 صبح
کد بالا شاید به خاطر اینکه درایور مورد نظر مادربورد و ندارین کار نمیکنه
اینو هم تست کنین معمولا جواب میده


using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\WMI",
"SELECT * FROM MSAcpi_ThermalZoneTemperature");

foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("MSAcpi_ThermalZoneTemperature instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("CurrentTemperature: {0}", queryObj["CurrentTemperature"]);
}
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
}
}
}

موفق باشید

behzadk
شنبه 15 دی 1386, 18:53 عصر
من یه پیشنهاد دارم البته د رمقابل بزرگان کار خوبی نیست
و اینکه و قتی با توابع wmi همان management کار می کنید خیلی بیشتر از msdn استفاهه کنین چون که واقعا به طور کامل توضیح داده و تمام کلاس ها توش هست

application_13
شنبه 15 دی 1386, 21:25 عصر
سلام دوستان. از کمکتون ممنون.
من تازه کارم. فقط اگه جناب برمودا بگه این کدی که نوشته کجا وارد کنم ممنونم.
اگرم وقت کردید یه توضیحی بدید.

application_13
شنبه 15 دی 1386, 23:13 عصر
سلام. آقا فهمیدم باید کجا بذارم.
ولی فقط یه جواب همش میده. که اینه: 3152
این عدد چیه؟یعنی فقط ام یه عدده ثابته؟

Amir Oveisi
یک شنبه 16 دی 1386, 00:43 صبح
Temperature at thermal zone in tenths of degrees Kelvin

فرمول تبدیلش به سانتی گراد رو برات میذارم

ولی خودم تست نکردم درست حسابی ببینم جوابش در چه حد درسته!

Amir Oveisi
دوشنبه 17 دی 1386, 00:18 صبح
اینم روش تبدیل به سانتی گراد :

decimal ConvertToCelsius(string reading)

{

return (decimal.Parse(reading) / 10 - 273.15m);

}

application_13
دوشنبه 17 دی 1386, 22:41 عصر
سلام دوست عزیز. از کمکت واقعا ممنونم.
حالا اگه من بخوام اینارو تو winapplication بیارم باید چیکار کنم؟ کداشو میارم خطا میده.

Amir Oveisi
دوشنبه 17 دی 1386, 23:48 عصر
شما تو کد قبلی که گذاشته بودم نگا کنین ببینین چه کارایی انجام میشه؟ اول میاد با استفاده از WMI دمای CPU رو پیدا میکنه و بعد تو صفحه Consol نشون میده مقدارشو.

حالا همه جا ( چه Consol و چه WinApp ) فقط این مقدار واسه شما مهمه و اینکه چجوری ازش استفاده کنین.

مثلا تو Consol واسه نشون دادن نتیجه از یه دستوری استفاده شده و قبلش هر کدی هست یه چیز ثابتیه. حالا این قسمت ثابت تو WinApp هم باید باشه (چون واسه پیدا کردن دما این کدا لازمه) و برای نشون دادن نتیجه تو WinApp هر جور دوست داشته باشی کار میکنی مثلا مقدارشو تو یه MessageBox نشون میدی یا ...

alimahdifar
شنبه 19 بهمن 1392, 21:35 عصر
از پست 8 مربوط به Amir Oveisi استفاده کردم ارور Not Supported داد.چه طوری حل میشه؟توی این سایت چند تا تاپیک دیگه در این مورد بود این از همه سرراست تر بود. که البته جواب نداد.آیا راه حل ساده تری برای بدست اوردن دمای CPU هست یا نه؟

مهران موسوی
شنبه 19 بهمن 1392, 21:52 عصر
دوست عزیز برای دسترسی به دیتاهای مربوط به مثلا دمای پردازنده ، هر Main board ، سیاست های خودش رو برای خوندن دیتاهای سنسور های ارائه شده بر روی Board داره . لازم به ذکر هست که بعضی از board ها هم اصلا امکان دسترسی به این دیتاهارو فراهم نمیکنند که خوب تعدادشون کم هست .

برای یک روش مطمئن ، شما میتونی از پروژه اوپن سورس ای مانند openhardwaremonitor یا alcpu استفاده کنی که رابط های دسترسی به سنسورهای مرتبط به Board های گوناگون رو بر اساس manuals های اونا تهیه کردن و طیف عزیمی از Board هارو پشتیبانی میکنند .

پروژه alcpu یک SDK رو ارائه میده برای توسعه دهنده ها که میتونید توی C# هم ازش بهره ببرید ...

http://openhardwaremonitor.org/
http://www.alcpu.com/CoreTemp/developers.html