Just nu i M3-nätverket
Jump to content

Kolla cpu temp


Suck

Recommended Posts

Kan man kolla cpu temperaturen via visual basic kod?

 

Kan man även kolla/ändra cpu fläktens fart?

 

MVH Fredde

 

[inlägget ändrat 2005-06-21 01:20:44 av ((SuCk)]

Link to comment
Share on other sites

hubbemannen

Du kanske kan ta hjälp av komponenter i Windows WMI Scripting. Där finns ett antal klasser som skulle kunna hjälpa dig att läsa (och ev. ställa) parametrar.

 

Fläkten: Win32_Fan - klassen

 

CPU-temperaturen lokaliserar jag inte i en hast, men titta själv på:

 

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/computer_system_hardware_classes.asp

 

Allmänt vågar jag, trots begränsad erfarenhet, säga att WMI-scripting-elementen är synnerligen trevliga och användbara. De låter en bekvämt komma åt information som annars bara är tillgänglig med krångliga API-anrop.

 

Om du är obekant med WMI kan TechNet TechNet Home>Script Center>Learn to Script vara en startpunkt för dina vidare övningar.

 

Det finns hjälpmedel att ta hem från nätet vid utprovning av vilken klass som ger önskad information:

 

Scriptomatic och ScriptomaticV2. Googla så är jag säker på att du hittar dem. (Har glömt var jag tog dem själv, tyvärr).

 

Lycka till!

 

mvh

hubbemannen

 

 

Link to comment
Share on other sites

Nu fattar jag vad det handlar om och att man ska lägga till i referenserna blabla.. =D men hur kan jag använda det i koden? är det som ett api anrop eller?

 

Jag hittade massor av vbscripts men ingen vb6 kod :S

om man skall kolla ledigt utrymme med vbscrips så skrev man:

 

 

strComputer = [GRÅ]"."[/GRÅ]
[color="#0000ff"]Set[/color] objWMIService = GetObject([GRÅ]"winmgmts:"[/GRÅ] _
    & [GRÅ]"{impersonationLevel=impersonate}!\\"[/GRÅ] _
    & strComputer & [GRÅ]"\root\cimv2"[/GRÅ])
[color="#0000ff"]Set[/color] colSettings = objWMIService.ExecQuery _
    ([GRÅ]"Select * from Win32_OperatingSystem"[/GRÅ])
[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] objOperatingSystem [color="#0000ff"]In[/color] colSettings 
    Wscript.Echo [GRÅ]"Available Physical Memory: "[/GRÅ] & _
        objOperatingSystem.FreePhysicalMemory
[color="#0000ff"]Next[/color]

 

 

Men hur gör man i vb6? Säg att jag vill skriva ut hur mycket ledigt utrymme det är i text1 hur?

 

:::REDIGERAT:::

Ps. Hittade vbscripten Här: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_tasks__computer_hardware.asp

 

MVH Fredde

 

[inlägget ändrat 2005-06-21 11:37:30 av ((SuCk)]

Link to comment
Share on other sites

hubbemannen

Detta svar är quick och väldigt "dirty", men prova gärna om det hjälper dig rätt. Får återkomma i morgon när jag sitter vid den putor där jag har såväl VB som WMI installerat. (Det finns alltså en betydande risk att kodförslaget inte funkar i praktiken, eftersom jag inte testat det!)

 

Utgår från att du har en textbox, Text1, och en knapp, Command1, i ditt formulär.

 

 

 

[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] Command1_Click
  [color="#0000ff"]Dim[/color] strComputer as [color="#0000ff"]String[/color]
  [color="#0000ff"]Dim[/color] objWMIService as Object
  [color="#0000ff"]Dim[/color] colSettings as Object
  [color="#0000ff"]Dim[/color] objOperatingSystem as Object
[color="#006400"]'[/color]
  strComputer = [GRÅ]"."[/GRÅ]

  [color="#0000ff"]Set[/color] objWMIService = GetObject([GRÅ]"winmgmts:"[/GRÅ] _
  & [GRÅ]"{impersonationLevel=impersonate}!\\"[/GRÅ] _
  & strComputer & [GRÅ]"\root\cimv2"[/GRÅ])

  [color="#0000ff"]Set[/color] colSettings = objWMIService.ExecQuery _
  ([GRÅ]"Select * from Win32_OperatingSystem"[/GRÅ])

  [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] objOperatingSystem [color="#0000ff"]In[/color] colSettings 
[color="#006400"]'Rapportera till textboxen[/color]
    Text1.Text=objOperatingSystem.FreePhysicalMemory
  [color="#0000ff"]Next[/color]
[color="#006400"]'[/color]
  [color="#0000ff"]Set[/color] objWMIService = [color="#0000ff"]Nothing[/color]
  [color="#0000ff"]Set[/color] colSettings = [color="#0000ff"]Nothing[/color]
  [color="#0000ff"]Set[/color] objOperatingSystem = [color="#0000ff"]Nothing[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

Som du ser är alla variablerna deklarerade som object/varianter. Med koden ovan lär du inte ens behöva referera WMI Scripting i ditt VB-projekt.

 

Om du sätter referensen och sedan nyttjar VB:s objekt-browser tror jag att du kan lura ut hur du ska deklarera dina variabler enligt konstens alla regler.

 

Berätta gärna hur det går, så ska jag försöka utveckla vid behov/önskemål.

 

mvh

hubbemannen

 

Link to comment
Share on other sites

känner mig fortfarande lite förvirrad :( om jag vill kolla vilken hastighet cpufläkten har just nu i en textbox vart skriver jag classen?

 

fattar inte mycket av koden tyvärr, skulle inte du kunna förklara koden bit för bit? =D hittade lite om cpufläktem men fattade dock inte mycket=D

 

Länkar:

 

CMI_fan: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/cim_fan.asp

 

SetSpeed Method of the CIM_Fan Class: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/setspeed_method_in_class_cim_fan.asp

 

win32_fan: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_fan.asp

 

Länktar tills imårrn då du kan svara=D

 

Tackar

 

MVH Fredde

 

Link to comment
Share on other sites

hubbemannen

Hej ((SuCk))/Fredde,

 

låt oss fortsätta med ditt exempel om ledigt minne, eftersom det har goda chanser att funka på alla datorer.

 

[color="#0000ff"]Option Explicit[/color]
Option Base 1
[color="#006400"]'----------------------------------------------------------[/color]
[color="#006400"]'Gör ett formulär med en textbox, Text1, och en kommando-[/color]
[color="#006400"]'knapp, Command1. Klistra in koden och kör.[/color]
[color="#006400"]'----------------------------------------------------------[/color]
[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] Command1_Click()
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#006400"]'Dimensioneringarna förutsätter att referensen till[/color]
  [color="#006400"]'Microsoft WMI Scripting Library har satts.[/color]
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#0000ff"]Dim[/color] strComputer As [color="#0000ff"]String[/color]
  [color="#0000ff"]Dim[/color] objWMIService As SWbemServices
  [color="#0000ff"]Dim[/color] colSettings As SWbemObjectSet
  [color="#0000ff"]Dim[/color] objOperatingSystem As SWbemObject
  [color="#006400"]'[/color]
  strComputer = [GRÅ]"."[/GRÅ]
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#006400"]'Skapa service-objektet som vi sedan opererar på[/color]
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#0000ff"]Set[/color] objWMIService = GetObject([GRÅ]"winmgmts:"[/GRÅ] _
  & [GRÅ]"{impersonationLevel=impersonate}!\\"[/GRÅ] _
  & strComputer & [GRÅ]"\root\cimv2"[/GRÅ])
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#006400"]'Skicka en fråga till service-objektet, i det här fallet[/color]
  [color="#006400"]'vill vi veta hur mycket ledigt minne som finns.[/color]
  [color="#006400"]'(Som du ser behöver man inte ha select * utan kan nöja[/color]
  [color="#006400"]'sig med att efterfråga precis den info man vill ha.)[/color]
  [color="#006400"]'colSettings blir en kollektion av resultat. I en del[/color]
  [color="#006400"]'fall innehåller kollektionen mer än ett objekt, t. ex.[/color]
  [color="#006400"]'om man skulle efterfråga information om NetworkAdapters[/color]
  [color="#006400"]'och man har flera nätverkskort installerade.[/color]
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#0000ff"]Set[/color] colSettings = objWMIService.ExecQuery _
  ([GRÅ]"Select FreePhysicalMemory from Win32_OperatingSystem"[/GRÅ])
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#006400"]'Loopa igenom för att ta ut information. Obs att man[/color]
  [color="#006400"]'alltid måste köra For Each - Next; colSettings har ingen[/color]
  [color="#006400"]'Item-property, dvs du kan inte komma åt enskilda element[/color]
  [color="#006400"]'med indexering.[/color]
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] objOperatingSystem [color="#0000ff"]In[/color] colSettings
    [color="#006400"]'------------------------------------------------------[/color]
    [color="#006400"]'Rapportera till textboxen[/color]
    [color="#006400"]'------------------------------------------------------[/color]
    Text1.Text = objOperatingSystem.FreePhysicalMemory
  [color="#0000ff"]Next[/color]
  [color="#006400"]'[/color]
  [color="#0000ff"]Set[/color] objWMIService = [color="#0000ff"]Nothing[/color]
  [color="#0000ff"]Set[/color] colSettings = [color="#0000ff"]Nothing[/color]
  [color="#0000ff"]Set[/color] objOperatingSystem = [color="#0000ff"]Nothing[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

Steg 1 för oss blir att verifiera att detta funkar hos dig, sedan kan vi se hur det funkar med fläkt-infon. Det lär bli en del "torr-sim" från min sida eftersom min fläkt inte låter sig avläsas via WMI.

 

Det är alltså inte säkert att WMI är lösningen i alla lägen - förutsättningen är i det här fallet att fläktleverantören har en Provider som inordnats i WMI-systemet!! Det kan du prova med Scriptomatics-scriptet för

Win32_Fan. Får du ut något så funkar WMI, annars inte.

 

Om fläkten är åtkomlig via WMI så byter vi i princip bara ut

  [color="#0000ff"]Set[/color] colSettings = objWMIService.ExecQuery _
  ([GRÅ]"Select FreePhysicalMemory from Win32_OperatingSystem"[/GRÅ])

mot

  [color="#0000ff"]Set[/color] colSettings = objWMIService.ExecQuery _
  ([GRÅ]"Select * from Win32_Fan"[/GRÅ])

samt ändrar inne i loopen

  Text1.Text = objOperatingSystem.DenFläktegenskapViVillVeta

(Sen kan det hända att vi vill byta ut variabelnamnen mot något som passar bättre i fläktsammanhanget!)

 

mvh

hubbemannen

 

Link to comment
Share on other sites

nu börjar poletten trilla ner=D men jag bytte ut det du sade och skulle testa DeviceID men när jag testar så står det fortfarande bara text1

 

KOD:

 

[color="#0000ff"]Option Explicit[/color]
Option Base 1
[color="#006400"]'----------------------------------------------------------[/color]
[color="#006400"]'Gör ett formulär med en textbox, Text1, och en kommando-[/color]
[color="#006400"]'knapp, Command1. Klistra in koden och kör.[/color]
[color="#006400"]'----------------------------------------------------------[/color]
[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] Command1_Click()
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#006400"]'Dimensioneringarna förutsätter att referensen till[/color]
  [color="#006400"]'Microsoft WMI Scripting Library har satts.[/color]
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#0000ff"]Dim[/color] strComputer As [color="#0000ff"]String[/color]
  [color="#0000ff"]Dim[/color] objWMIService As SWbemServices
  [color="#0000ff"]Dim[/color] colSettings As SWbemObjectSet
  [color="#0000ff"]Dim[/color] objOperatingSystem As SWbemObject
  [color="#006400"]'[/color]
  strComputer = [GRÅ]"."[/GRÅ]
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#006400"]'Skapa service-objektet som vi sedan opererar på[/color]
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#0000ff"]Set[/color] objWMIService = GetObject([GRÅ]"winmgmts:"[/GRÅ] _
  & [GRÅ]"{impersonationLevel=impersonate}!\\"[/GRÅ] _
  & strComputer & [GRÅ]"\root\cimv2"[/GRÅ])
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#006400"]'Skicka en fråga till service-objektet, i det här fallet[/color]
  [color="#006400"]'vill vi veta hur mycket ledigt minne som finns.[/color]
  [color="#006400"]'(Som du ser behöver man inte ha select * utan kan nöja[/color]
  [color="#006400"]'sig med att efterfråga precis den info man vill ha.)[/color]
  [color="#006400"]'colSettings blir en kollektion av resultat. I en del[/color]
  [color="#006400"]'fall innehåller kollektionen mer än ett objekt, t. ex.[/color]
  [color="#006400"]'om man skulle efterfråga information om NetworkAdapters[/color]
  [color="#006400"]'och man har flera nätverkskort installerade.[/color]
  [color="#006400"]'--------------------------------------------------------[/color]
    [color="#0000ff"]Set[/color] colSettings = objWMIService.ExecQuery _   [color="#006400"]'<---[/color]
  ([GRÅ]"Select * from Win32_Fan"[/GRÅ])
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#006400"]'Loopa igenom för att ta ut information. Obs att man[/color]
  [color="#006400"]'alltid måste köra For Each - Next; colSettings har ingen[/color]
  [color="#006400"]'Item-property, dvs du kan inte komma åt enskilda element[/color]
  [color="#006400"]'med indexering.[/color]
  [color="#006400"]'--------------------------------------------------------[/color]
  [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] objOperatingSystem [color="#0000ff"]In[/color] colSettings
    [color="#006400"]'------------------------------------------------------[/color]
    [color="#006400"]'Rapportera till textboxen[/color]
    [color="#006400"]'------------------------------------------------------[/color]
     Text1.Text = objOperatingSystem.DeviceID    [color="#006400"]'    <-----[/color]

  [color="#0000ff"]Next[/color]
  [color="#006400"]'[/color]
  [color="#0000ff"]Set[/color] objWMIService = [color="#0000ff"]Nothing[/color]
  [color="#0000ff"]Set[/color] colSettings = [color="#0000ff"]Nothing[/color]
  [color="#0000ff"]Set[/color] objOperatingSystem = [color="#0000ff"]Nothing[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

MVH Fredde

 

[inlägget ändrat 2005-06-22 10:44:37 av ((SuCk)]

Link to comment
Share on other sites

hubbemannen

Hej,

 

1. Funkade det att få ut fria minnet?

 

2. Prova att köra Scriptomatic-scriptet för Win32_Fan och berätta vad du får ut. Kör varianten med Select * så kan vi se vilka properties som du verkligen får svar på.

 

mvh

hubbemannen

 

Link to comment
Share on other sites

1. Ja

2. jag letade upp win32_fan och fick fram detta skript:

 

[color="#0000ff"]On Error Resume[/color] [color="#0000ff"]Next[/color]

[color="#0000ff"]Const[/color] wbemFlagReturnImmediately = &h10
[color="#0000ff"]Const[/color] wbemFlagForwardOnly = &h20

arrComputers = [color="#0000ff"]Array[/color]([GRÅ]"localhost"[/GRÅ])
[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] strComputer [color="#0000ff"]In[/color] arrComputers
   WScript.Echo
   WScript.Echo [GRÅ]"=========================================="[/GRÅ]
   WScript.Echo [GRÅ]"Computer: "[/GRÅ] & strComputer
   WScript.Echo [GRÅ]"=========================================="[/GRÅ]

   [color="#0000ff"]Set[/color] objWMIService = GetObject([GRÅ]"winmgmts:\\"[/GRÅ] & strComputer & [GRÅ]"\root\CIMV2"[/GRÅ])
   [color="#0000ff"]Set[/color] colItems = objWMIService.ExecQuery([GRÅ]"SELECT * FROM Win32_Fan"[/GRÅ], [GRÅ]"WQL"[/GRÅ], _
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)

   [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] objItem [color="#0000ff"]In[/color] colItems
      WScript.Echo [GRÅ]"ActiveCooling: "[/GRÅ] & objItem.ActiveCooling
      WScript.Echo [GRÅ]"Availability: "[/GRÅ] & objItem.Availability
      WScript.Echo [GRÅ]"Caption: "[/GRÅ] & objItem.Caption
      WScript.Echo [GRÅ]"ConfigManagerErrorCode: "[/GRÅ] & objItem.ConfigManagerErrorCode
      WScript.Echo [GRÅ]"ConfigManagerUserConfig: "[/GRÅ] & objItem.ConfigManagerUserConfig
      WScript.Echo [GRÅ]"CreationClassName: "[/GRÅ] & objItem.CreationClassName
      WScript.Echo [GRÅ]"Description: "[/GRÅ] & objItem.Description
      WScript.Echo [GRÅ]"DesiredSpeed: "[/GRÅ] & objItem.DesiredSpeed
      WScript.Echo [GRÅ]"DeviceID: "[/GRÅ] & objItem.DeviceID
      WScript.Echo [GRÅ]"ErrorCleared: "[/GRÅ] & objItem.ErrorCleared
      WScript.Echo [GRÅ]"ErrorDescription: "[/GRÅ] & objItem.ErrorDescription
      WScript.Echo [GRÅ]"InstallDate: "[/GRÅ] & WMIDateStringToDate(objItem.InstallDate)
      WScript.Echo [GRÅ]"LastErrorCode: "[/GRÅ] & objItem.LastErrorCode
      WScript.Echo [GRÅ]"Name: "[/GRÅ] & objItem.Name
      WScript.Echo [GRÅ]"PNPDeviceID: "[/GRÅ] & objItem.PNPDeviceID
      strPowerManagementCapabilities = [color="#0000ff"]Join[/color](objItem.PowerManagementCapabilities, [GRÅ]","[/GRÅ])
         WScript.Echo [GRÅ]"PowerManagementCapabilities: "[/GRÅ] & strPowerManagementCapabilities
      WScript.Echo [GRÅ]"PowerManagementSupported: "[/GRÅ] & objItem.PowerManagementSupported
      WScript.Echo [GRÅ]"Status: "[/GRÅ] & objItem.Status
      WScript.Echo [GRÅ]"StatusInfo: "[/GRÅ] & objItem.StatusInfo
      WScript.Echo [GRÅ]"SystemCreationClassName: "[/GRÅ] & objItem.SystemCreationClassName
      WScript.Echo [GRÅ]"SystemName: "[/GRÅ] & objItem.SystemName
      WScript.Echo [GRÅ]"VariableSpeed: "[/GRÅ] & objItem.VariableSpeed
      WScript.Echo
   [color="#0000ff"]Next[/color]
[color="#0000ff"]Next[/color]


[color="#0000ff"]Function[/color] WMIDateStringToDate(dtmDate)
WScript.Echo dtm: 
WMIDateStringToDate = [color="#0000ff"]CDate[/color]([color="#0000ff"]Mid[/color](dtmDate, 5, 2) & [GRÅ]"/"[/GRÅ] & _
[color="#0000ff"]Mid[/color](dtmDate, 7, 2) & [GRÅ]"/"[/GRÅ] & [color="#0000ff"]Left[/color](dtmDate, 4) _
& [GRÅ]" "[/GRÅ] & [color="#0000ff"]Mid[/color] (dtmDate, 9, 2) & [GRÅ]":"[/GRÅ] & [color="#0000ff"]Mid[/color](dtmDate, 11, 2) & [GRÅ]":"[/GRÅ] & [color="#0000ff"]Mid[/color](dtmDate,13, 2))
[color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]

 

sparade som .vbs och fick upp:

ruta1: tom

2: =========================================

3: computer: localhost

4: =========================================

 

inget mer:S

 

detta betyder vad? hehe

 

Tryckte på run också och då kom cmd upp och det stod samma sak där

 

MVH Fredde

[inlägget ändrat 2005-06-22 12:08:18 av ((SuCk)]

[inlägget ändrat 2005-06-22 12:10:03 av ((SuCk)]

Link to comment
Share on other sites

hubbemannen

Hej Fredde,

 

Det betyder tyvärr att WMI inte är till någon hjälp i det här fallet. Din fläkt har inte talat om för WMI att den finns och vad den har för egenskaper.

 

mvh

hubbemannen

 

Link to comment
Share on other sites

hubbemannen

Hej Fredde,

 

prova Win32_TemperatureProbe.

 

Dessutom kan du prova i root\WMI (till skillnad från root\cimv2 som vi tidigare rört oss i) och där heter klassen MSAcpi_ThermalZoneTemperature.

 

Återigen, detta fungerar endast om dina hårdvarukomponenter har informerat WMI om sin existens och sina faciliteter.

 

Jag har knatat runt lite här och kunnat konstatera att ingen av "mina" stationära datorer har någon information att ge - däremot är WMI-ruljangsen framgångsrik på de små lapptopparna. Det är framförallt

MSAcpi_ThermalZoneTemperature som ger informationen.

(CurrentTemperature - sorten verkar vara tiondelsgrader Kelvin)

 

TIPS: Du bör ha ett verktyg som heter wbemtest.exe på din dator. Försök ta hem bruksanvisning från nätet - detta verktyg är synnerligen behändigt när man letar runt bland WMI-klasserna och försöker fiska information som vi gör nu. Tyvärr kan jag inte dirigera dej till någon bra sajt för detta, men gör ett försök att googla (eller yahooa eller vad du nu gör) själv.

 

mvh

hubbemanen

 

Link to comment
Share on other sites

Tack så mycket! nu vet jag vad det handlar om.. du har öppnat otroligt många ny möjligheter för min fortsatta programmering TACK

 

MVH Fredde

 

Link to comment
Share on other sites

hubbemannen

Det var verkligen roligt att få veta. Lycka till och mycket nöje i dina fortsatta övningar!

 

mvh

hubbemannen

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...