delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف يمكن معرفة حرارة المعالج برمجيا
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

كيف يمكن معرفة حرارة المعالج برمجيا

و جزاكم الله خير
وعليكم السلام ورحمة الله
استخدم WMI، هنا مثال مع إدراج المكتبة WbemScripting_TLB أو المرفق
كود :
http://www.ciuly.com/delphi/wmi/cpu-system-temperature/
بالتوفيق.
جزاك الله خيرا على الرد السريع و لكن بعد تحميلي للمرفق الله اعلم فيه خطأ لاني بعد التنفيد يأتيني خطأ هنا
[COLOR="Red"]WbemScripting_TLB, activex;
[/COLOR]
فلم اعرف اين يكمن المشكل
المثال يستخدم مكتبة من Microsoft WMI Scripting
قم بتثبيتها أولا:
كود :
http://theroadtodelphi.wordpress.com/2010/11/28/be-careful-when-you-import-the-microsoft-wmiscripting-library/
وجهني اخي من فضلك بعد زيارة الرابط الله اعلم وجدت الرابطين الذين سيفداني بحول الله
تكرم من هنا من فضلك :

كود :
http://msdn.microsoft.com/en-us/library/aa393762(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa393259(v=VS.85).aspx

فلم أعرف ماذا أحمل

و بوركت اخي على تقديم العون
ولا واحدة منهما...
الذي ينبغي أن تقوم بتثبيت المكتبة كما تفعل مع ActiveX/OCX
هنا طريقة أخرى لاستخدام WMI دون تثبيت المكتبة بأكملها:
PHP كود :
{$APPTYPE CONSOLE}

uses
  SysUtils
,
  
ActiveX,
  
ComObj,
  
Variants;

function 
GetWMIstring(wmiHost, root, wmiClass, wmiProperty: string): string;
var
  
objWMIService : OLEVariant;
  
colItems      : OLEVariant;
  
colItem       : OLEVariant;
  
oEnum         : IEnumvariant;
  
iValue        : LongWord;

  function 
GetWMIObject(const objectName: String): IDispatch;
  var
    
chEaten: Integer;
    
BindCtx: IBindCtx;//for access to a bind context
    
Moniker: IMoniker;//Enables you to use a moniker object
  
begin
    OleCheck
(CreateBindCtx(0, bindCtx));
    
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));//Converts a string into a moniker that identifies the object named by the string
    
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));//Binds to the specified object
  
end;

begin
  objWMIService 
:= GetWMIObject(Format('winmgmts:\\%s\%s',[wmiHost,root]));
  
colItems      := objWMIService.ExecQuery(Format('SELECT * FROM %s',[wmiClass]),'WQL',0);
  
oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
  while 
oEnum.Next(1, colItem, iValue) = 0 do
  
begin
     Result
:=colItem.Properties_.Item(wmiProperty, 0); //you can improve this code  ;) , storing the results in an TString.
  
end;
end;

begin
 
try
    
CoInitialize(nil);
    try
      
WriteLn(GetWMIstring('.', 'root\CIMV2', 'Win32_OperatingSystem','Caption'));
      
Readln;
    finally
    
CoUninitialize;
    
end;
 
except
    on E
:Exception do
    
Begin
        Writeln
(E.Classname, ': ', E.Message);
        
Readln;
    
End;
  
end;
end. 
المصدر:
كود :
http://stackoverflow.com/questions/2761328/how-do-i-use-wmi-with-delphi-without-drastically-increasing-the-applications-fil
بالتوفيق.
أستاذنا الفاضل و الله وجدت صعوبة فهلا سهلتها عليا سهل الله عليك في دنيا .

هل يمكنك ان تبرمجها لي او تقدم لي مشروع و سأدرس السورس

و الله لا يحرمك الاجر
إقتباس :هل يمكنك ان تبرمجها لي او تقدم لي مشروع و سأدرس السورس
صدقني، لا أعرف Sad
كما قال صاحب المثال الأول، أن الفكرة نجحت معه في لوحة GigaByte ولا يدري عن النتيجة مع بقية الموديلات
وقد يتوقف الأمر على دعم Driver لتوفير هذه المعلومة، وقد يتطلب أيضا إعادة تكييف مكتبة WMI أخرى
وهو ما يتطلب معرفة جيدة بـ WMI...
جرب باستخدام Magenta WMI مجانية+سورس
كود :
http://www.magsys.co.uk/delphi/magwmi.asp
السورس مرفق.
بارك الله فيك أستاذنا على ما قدمته لي و جزاك الله خيرا .. و اعتقد ان الامر اضخم مني بكثير و اكثر مما كنت أتوقع
و البرنامجين الاول و الثاني برامج ضخمة نسأل الله و تعالى ان يرزقنا من علمه حتى نبرمج مثلها و اكثر

للأسف سأتخلى عن المشروع و اتوجه الى امور اخرى و أسهل و اعتذر لك على الاطالة و اشكرك على صبرك معي

اتمنى ان يغلق الموضوع و شكرا