PDA

View Full Version : حرفه ای: دمای CPU



xminxmin
دوشنبه 23 خرداد 1390, 18:31 عصر
سلام دوستان
من در مورد بدست آوردن دمای CPU کلی جستجو کردم. همه کدهایی هم که پیدا کردم همینی هست که در زیر آوردم. همه سایت ها همین رو می دن.
اما این کد انگار یه جاییش می لنگه!
یه فیلم در یوتوب دیدم که طرف برنامه رو نوشت و اجرا هم کرد. یعنی ذکر کرده بود اگر با Admin فایل ساخته شده در Debug یا release رو اجرا کنم مشکل حله. و تو اون ویدئو واقعا هم حل بود و کار کرد.
اما من همین کد رو مثل همون ویدئو نوشتم اما کار نمی کنه.

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


Imports System
Imports System.Management

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim searcher As New ManagementObjectSearcher("root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature")

For Each queryObj As ManagementObject In searcher.Get()
Dim temp As Double = CDbl(queryObj("CurrentTemperature"))
temp = (temp - 2732) / 10.0
MessageBox.Show(temp.ToString)
Next

Catch ex As ManagementException
MessageBox.Show(ex.Message)
End Try
End Sub
End Class

Alghoochi
دوشنبه 23 خرداد 1390, 20:50 عصر
این کد یه کم فرق می‌کنه.

''' <summary>
''' Specifies the format the temp should be returned in
''' </summary>
Public Enum TempFormat
Fahrenheit
Celsius
Kelvin
''' <summary>
''' The CPU temp will be returned in it's raw, uncalculated format
''' </summary>
Raw
End Enum
''' <summary>
''' Gets the current temp of the CPU
''' </summary>
''' <param name="Format">The temp scale the value should be returned in</param>
Public Function GetCPUTemp(ByVal Format As TempFormat) As Single
Dim enumerator As System.Management.ManagementObjectCollection.Manag ementObjectEnumerator
Dim searcher As New System.Management.ManagementObjectSearcher("root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature")
enumerator = searcher.Get.GetEnumerator()
While enumerator.MoveNext
Dim obj As System.Management.ManagementObject = CType(enumerator.Current, System.Management.ManagementObject)
Select Case format
Case TempFormat.Fahrenheit
Return CSng((obj.Item("CurrentTemperature") / 10 - 273.15) * 9 / 5 + 32)
Case TempFormat.Celsius
Return CSng(obj.Item("CurrentTemperature") / 10 - 273.15)
Case TempFormat.Kelvin
Return CSng(obj.Item("CurrentTemperature") / 10)
Case TempFormat.Raw
Return CSng(obj.Item("CurrentTemperature"))
End Select
End While
End Function

saeid.memfis
دوشنبه 23 خرداد 1390, 20:54 عصر
سلام
من تست کردم..کدش مشکلی نداره
فقط واسه من ارور عدم دسترسی access denide داد...شاید چون ادمین نبود
واسه شما چه اروری میده؟

xminxmin
سه شنبه 24 خرداد 1390, 08:00 صبح
این کد یه کم فرق می‌کنه.

''' <summary>
''' Specifies the format the temp should be returned in
''' </summary>
Public Enum TempFormat
Fahrenheit
Celsius
Kelvin
...


ممنون دوست عزیز. اما اگر دقت کنید این کد هیچ فرقی با کد من نداره. فقط یه بخش تغییر واحد اضافه داره.

xminxmin
سه شنبه 24 خرداد 1390, 08:01 صبح
سلام
من تست کردم..کدش مشکلی نداره
فقط واسه من ارور عدم دسترسی access denide داد...شاید چون ادمین نبود
واسه شما چه اروری میده؟

دوست من. اگر غیر ادمین اجرا کنی که خطای در حال اجرا میده. و اگر ادمین باشی همون خطایی رو میده که شما در بخش Exeption تعریف کردی

xminxmin
چهارشنبه 25 خرداد 1390, 11:22 صبح
سلام دوستان.
موضوع رو فهمیدم. این برنامه برای یه سری از MainBoard ها درست عمل می کنه. مخصوصا ASUS
روی سیستمی با مادربورد ASUS جواب داد

mosi-cowboy
جمعه 23 آبان 1393, 21:20 عصر
باید یه Refrence به System.Management.Dll بدین بعد این کد:


try
{
ManagementObjectSearcher f = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature");
foreach (ManagementObject i in f.Get())
{
double te = double.Parse(i["CurrentTemperature"].ToString());
te -= 2732;
te /= 10.0;
MessageBox.Show(te.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}


برای دمای Cpu دلیل اینکه Access Denied میده اینکه برنامه تحت ادمین اجرا نمیشه !!!!
شما کد ها رو بنویسید بعد Build بزنید .
بعد برید پوشه پروژتون Run as Administrator بزنید حتما نشون میده !!!!!!!!!!!!!