delphi 如何获取CUP风扇转速和温度  越简单越详细越好!!!!!急!!!

解决方案 »

  1.   

    读CMOS,可能用到汇编,如同dos下用debug解除CMOS密码一样
      

  2.   

    1、读BIOS信息
    2、根据不同主板芯片,分别调厂商API。这个是正途,厂商自带的监测工具,Everest等应该是这样实现的。
      

  3.   

    這是KTOP網站上討論的結果。如果說, 你想要寫一支程式可以得到所有desktop & notebook主機板上的CPU溫度, 風扇轉速, 主機板溫度, 那麼, 我可以給你很肯定的答案---No way.但是如果針對單一主機板, 是不是就能讀呢? 那麼, 我可以給你很肯定的答案---You got it!有差這麼多嗎? 以下解析目前主機板在業界的作法概念:
    1. 所謂風扇速度, CPU溫度/主機板溫度, 並不在於MicroSoft的標準規範內, 所以沒有所謂的API
    2. 雖然Windows有所謂的ASL code, 但是OS要取得這此information也是透過BIOS vendor寫好ASL code report給OS, 所以不同板子的ASL code會有所不一樣
    3. 為什麼ASL code的report方法會不一樣? 以Thermal而言, 各家主機板H/W放了Thermal sensor在CPU/南橋/北橋/VGA chipset or 主機板上覺得要防過熱的方法, 而這些Thermal sensor會接到一個總管Thermal的chipset. 你只要回contrl這個thermal chipset那你就可以讀到所要的Fan Speed or Thermal
    4. 重點是Thermal chipset大部份是使用SMBus來接的, 而不是使用PCI介面(因為SMBus只要4根電線, 以H/W成本考量, 是比PCI介面來的超低價)
    5. SMBus是接在那裡? Notebook可以接在KBC上, 或是接到南橋上
    6. 若是接到南橋上, 現今市場上比較可以看見的有Intel/VIA/SIS/ALI等四家廠商各位只要看到第5&第6點就知道為什麼沒有辦法用同一支程式就能讀到所有主機版的Informaion了吧! 重點在於你不知道廠商是接在那一個SMBus上, 你不知道SMBus的device ID, 你也不知道Thermal sensor的device是byte read還是word read! 或許你會想說, 那我寫個程式來scan 好了 ^^", 很好的觀念, 但是, 如果你沒玩過SMBus, 你就不知道SMBus是多麼的Weak, 可能相對應的事沒處理好, 就把你系統Q住了, 看到這.....你有沒有覺的SMBus很xx呢 ^^寫到這裡. 如果只是一個PCI的device, 我想, 你只要對IO 0xcf8, 0xcfc會read/write就可以scan出主機板上所有的PCI device, 所以要知道你主機板上的South Bridge是Intel/VIA/SIS/ALI 不是很難的事那SMBus呢?
    這裡我只寫個概述, 詳細請參考你要access的device是接到那一個KBC or South Bridge, 去看他的Spec, 大同小異囉.1. SMBus Address Register: 最多只能接128個device
    2. SMBus Protocol Register: 可分為
        byte read/byte write/word read/word write/byte block read/byte block write/word block read/word block write
    3. SMBus Data Register: 依照你要read/write的data去讀寫相對應的位置, 一般都會有Data 0 Register, Data 1 Register
    4. SMBus Command Register: 雖然名字叫作Command Register, 但其實就是你要讀寫device裡面的第幾個offset data, 這個Register一般作完時會清成零, 你只要填入非零值, SMBus就開始動起來啦....一直wait for zero 才表示作完了
    5. SMBus Status Register: 雖然Command Register清成零時, 表示作完一次動作, 但是你也要check 這個register是不是time out之類的 ^^以上SMBus如與Spec有所不同, 當然是以Spec為主. 而且device是byte access or word access都要參考相關的device spec.不然...Spec上明明寫著Word protocol, 不要問為什麼用byte read/write會fail要玩SMBus的人.....我只能精神上支持你