Es wird nur ein Prozessor erkannt

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    Es wird nur ein Prozessor erkannt

    Hallo,

    versuche nun schon eine Weile meine Hardware auszulesen und scheitere an den Prozessoren.

    VB.NET-Quellcode

    1. Sub Prozessor_ermitteln()
    2. Dim cpuItem As Object
    3. Dim cpu As Object
    4. cpuItem = GetObject("winmgmts:").InstancesOf("Win32_Processor")
    5. cpuItem.Count.ToString.Trim()
    6. For Each cpu In cpuItem
    7. Application.DoEvents()
    8. MsgBox("Lese ")
    9. With Verwaltung.TreeView_Hardware
    10. .Nodes(0).Nodes.Add("Prozessor CPU - ID : " & cpu.ProcessorId)
    11. .Nodes(0).Nodes.Add("Bezeichnung : " & Trim$(cpu.name))
    12. .Nodes(0).Nodes.Add("Taktrate (MHz) : " & cpu.MaxClockSpeed)
    13. End With
    14. NextcpuItem = Nothing
    15. End Sub


    Anhand der Msgbox kann ich erkennen, dass er nur einmal die for-next-Schleife durchläuft. Mein Computer verfügt aber über vier Kerne. Was mache ich hier falsch?
    Gruß Markus
    Hallo Westerwälder,

    versuch es mal mit dem PerformanceCounter aus der Toolbox.
    Dazu benötigst du aber Adminrechte.

    Wie du den bedienst findest du überall im Netz der Netze.

    Gruss

    mikeb69
    Hallo,

    habe mir nun einen Code entwickelt, welcher aber ein falsches Ergebnis liefert:

    VB.NET-Quellcode

    1. Dim [PerformanceCounter] As New PerformanceCounter
    2. Dim CPU_ANZ As Integer
    3. With [PerformanceCounter]
    4. .CategoryName = "Prozessorinformationen"
    5. .CounterName = "Prozessorfrequenz"
    6. .InstanceName = "_Total"
    7. End With
    8. CPU_ANZ = [PerformanceCounter].InstanceName.Count - 3
    9. For CPUNr As Integer = 0 To CPU_ANZ Step 1
    10. [PerformanceCounter].InstanceName = "0," & CPUNr.ToString
    11. With TreeView_Hardware
    12. .Nodes(0).Nodes.Add("CPU # " & CPUNr.ToString)
    13. .Nodes(0).Nodes.Add("Taktfrequenz (MHz) " & [PerformanceCounter].NextValue.ToString)
    14. End With
    15. Next


    Erhalte für die Taktfrequenz immer den Wert 2000. Der kann aber nicht stimmen. Lese ich einen einzelen Prozessor aus, bekomme ich den in etwa realistischen Wert von 2660. Liegt es an den Admin-Rechte? Die vier Kerne werden im treeview angezeigt.
    Gruß Markus
    Hallo nochmal,

    komme mit dem Problem nicht wirklich weiter. Ermittele ich mit dem PerformanceCounter zum Beispiel den verfügbaren Arbeitsspeicher erhalte ich korrekte Werte. Dies funktioniert auch ohne Admin-Rechte. Leider finde ich nicht die Methode, wie ich dem PerformanceCounter die Rechte einräume. Die vielen Beispiele im Netz zum Thema PerformanceCounter (hier ein Beispiel youtube.com/watch?v=GryUeAnkwVc) kommen ohne die Adminrechte aus.

    Wie komme ich denn nun hier weiter?
    Gruß Markus
    Hallo Westerwälder,

    welche VS Version hast du ?
    Express oder Pro ?

    EDIT:
    Hab dir hier mal ein Beispielprojekt, welches ich vor Jahren erstellt habe, mal hochgeladen.

    Das mit den Adminrechten scheint nicht so zu sein wie ich dachte.
    Ist auch schon lange her.

    Gruss

    mikeb69

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mikeb69“ ()

    Hallo Mike, ist irgendwie nicht meine Woche.

    Bekomme nur einen leeren Zipp-Ordner runtergeladen - Site freigegeben.

    Liste dir mal nachstehend auf, was schon funktioniert.

    Spoiler anzeigen


    VB.NET-Quellcode

    1. ' Ram
    2. With PerformanceCounter_Divers
    3. .CategoryName = "Arbeitsspeicher"
    4. .CounterName = "Verfgbare MB"
    5. .InstanceName = ""
    6. End With
    7. Dim Frei As Double = PerformanceCounter_Divers.NextValue
    8. Dim Nutzung As Double = ((PC.Ram_Total * 1000) - Frei)
    9. Dim Prozentberechnung As Double = (Nutzung * 100) / PC.Ram_Total
    10. Dim Prozent As Integer = Int(Prozentberechnung / 1000)
    11. Label23.Text = Prozent.ToString & " %"
    12. Label24.Text = Nutzung.ToString & " von " & (PC.Ram_Total * 1000).ToString & " MByte in Nutzung"
    13. ProgressBar_RAM.Value = Prozent
    14. ' HDD
    15. With PerformanceCounter_Divers
    16. .CategoryName = "Logischer Datentrger"
    17. .CounterName = "MB frei"
    18. .InstanceName = "C:"
    19. End With
    20. Frei = PerformanceCounter_Divers.NextValue
    21. Nutzung = ((PC.RootLaufwerk_Kapazitt * 1000) - Frei)
    22. Prozentberechnung = (Nutzung * 100) / PC.RootLaufwerk_Kapazitt
    23. Prozent = Int(Prozentberechnung / 1000)
    24. Label25.Text = Prozent.ToString & " %"
    25. Label26.Text = CInt(Nutzung / 1000).ToString & " von " & (PC.RootLaufwerk_Kapazitt).ToString & " GByte in Nutzung"
    26. ProgressBar_HDD.Value = Prozent




    Fehlt ja nur die Geschichte mit den Prozessoren. Kann es vielleicht an meinem Board liegen?
    Gruß Markus
    Hallo Westerwälder,

    ist auch nicht mein Tag.

    Du kannst dir das Projekt über den Link (vorheriger Beitrag) jetzt runterladen.
    (Hatte Rechteprobleme auf dem Server !)

    Gruss

    mikeb69

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mikeb69“ ()

    Hallo Mike,

    danke dir für das Tool. Funktioniert einwandfrei. Nur bei mir im Projekt nicht. Wie gesagt, für RAM und HDD geht es, bei der Auslesung der Prozessorzeit in Prozent erhalte ich immer den Wert 0. Dabei lass ich mein Backup-Programm in einer Schleife laufen, dass der Prozessor auch wirklich was zu tun hat.

    VB.NET-Quellcode

    1. ' CPU
    2. With PerformanceCounter_Divers
    3. .CategoryName = "Prozessor"
    4. .CounterName = "Prozessorzeit (%)"
    5. .InstanceName = "_Total"
    6. End With
    7. ProgressBar_CPU.Value = PerformanceCounter_Divers.NextValue
    8. Label21.Text = (PerformanceCounter_Divers.NextValue).ToString & " %"


    Danke für deine Mühe.
    Gruß Markus
    Hallo Westerwälder,

    nehmen wir mal mein Tool.

    Markiere:
    Processor
    _total
    processorzeit %

    und drück den Start-Button.

    Jetzt kannst du in der Titelleiste des Fensters den aktuellen Wert sehen.
    (evtl Maus dazu bewegen)

    Bei mir ist es egal ob ich _total oder 0 oder 1 auswähle - es kommen immer Werte zwischen 0 und 20

    Prozessor Tackt:
    Mein Prozessor
    Wenn ich nun
    Prozessorinformation
    0,1 oder 0,0
    Prozessorfrequenz
    auswähle und Start drücke wird 2100 in der Titelleiste ausgegeben.

    Perfekt würde ich sagen.

    Gruss

    mikeb69
    Hallo Mike,

    hier erst mal meine Prozessorenwerte

    Spoiler anzeigen


    Informationsliste Wert
    CPU-Eigenschaften
    CPU Typ 2x Intel Pentium III Xeon, 2666 MHz (9 x 296)
    Befehlssatz x86, x86-64, MMX, SSE, SSE2, SSE3
    Vorgesehene Taktung 2667 MHz
    L1 Code Cache 32 KB
    L1 Datencache 32 KB
    L2 Cache 2 MB (On-Die, ATC, Full-Speed)

    Multi CPU
    Motherboard ID OEM00000 PROD00000000
    CPU #0 Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2666 MHz
    CPU #1 Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2666 MHz
    CPU #2 Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2666 MHz
    CPU #3 Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2666 MHz

    CPU Hersteller
    Firmenname Intel Corporation
    Produktinformation intel.com/products/browse/processor.htm

    CPU Auslastung
    CPU #1 / Core #1 / HTT Unit #1 0 %
    CPU #1 / Core #1 / HTT Unit #2 0 %
    CPU #1 / Core #2 / HTT Unit #2 0 %
    CPU #1 / Core #2 / HTT Unit #1 0 %




    Mit deinem tool habe ich nun folgende Werte bekommen:

    1.) Prozessor
    _total
    _ prozessorzeit %

    Werte : 0, 0.304..., 0,768...

    2.) Prozessorinformationen
    Prozessorfrequenz

    _total --> Wert 0
    0_total --> Wert 0
    0,0 --> Wert 2000
    0,1 --> Wert 2000
    0,2 --> Wert 2000
    0,3 --> Wert 2000

    Weiss nun auch nicht wo die 2000 herkommen.

    Lese ich mit

    VB.NET-Quellcode

    1. Ram_Total = CDbl((My.Computer.Info.TotalPhysicalMemory) / 1000 / 1000 / 1000)
    2. Ram_Total = Int(Ram_Total * 100 + 0.5) / 100


    erhalte ich den Wert von 2660.

    Gruß Markus
    Gruß Markus
    Guten Morgen Mike,

    heute morgen dein tool auf dem Lap laufen lassen. Bekomme da relastische Werte ... aber auch nur dann, wenn ich 0,0 angebe. Bei total oder 0_total erhalte ich den Wert 0.

    Vielleicht ist das ein Intel-Problem, sehe du hast einen AMD.



    Gruss Markus
    Gruß Markus
    Hallo Westerwälder,

    ich bekomme auch nur Werte wenn ich 0,0 oder 0,1 angebe.
    Alles mit total liefert mir auch 0.

    An deiner Stelle würde ich mir mal das Bios und die CPU selbst ansehen.
    Ob das eingestellt oder verbaut ist was du erwartest.

    Gruss

    mikeb69
    Hallo Westerwälder,

    du könntest es einmal über die Win32 Klasse versuchen.

    VB.NET-Quellcode

    1. Imports System.Management
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. Dim CoreSearcher As New ManagementObjectSearcher("SELECT * FROM Win32_Processor")
    5. For Each CpuCore As ManagementObject In CoreSearcher.Get()
    6. MsgBox(CpuCore("NumberOfCores"))
    7. Next
    8. End Sub
    9. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fakiz“ ()

    Hallo Westerwälder,

    auch wenn du mit WMI alle Werte auslesen kannst (weiß ich aber nicht) so werden diese gleich denen des Performancecounters sein.

    Ist zwar nur eine Annahme - dennoch bin ich mir hier sehr sicher.

    Noch was zum Nachdenken:

    Hab mal gelesen das verschiedene CPU ihren Takt runterfahren wenn keine hohe Leistung gefordert wird.

    Gruss

    mikeb69

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mikeb69“ ()