![]() |
RAM Bänke auslesen
Hallo,
hat jemand eine Idee wie man an die Belegung der Ram Bänke rankommen könnte? Also belegt/nicht belegt usw. Ich hab mir schon die Finger wund gegooglet, konnte aber leider bisher nichts entsprechendes entdecken :( Gruß Oliver |
Re: RAM Bänke auslesen
Ich glaub über DMI geht das :gruebel:
|
Re: RAM Bänke auslesen
Hallo,
durch etwas googlen bin ich auch zu dem Schluss gekommen das es mit DMI (Desktop Management Interface) gehen müsste. Nur leider konnte ich bisher keine Code Schnippsel oder ähnliches entdecken wie ich DMI mit Delphi nutzen kann. Hält sich jeder Hersteller überhaupt daran? Oder kann das wieder von Hersteller zu Hersteller unterschiedlich sein? Gruß Oliver |
Re: RAM Bänke auslesen
Ich nehme gerne auch kostenpflichtige Komponenten die mir solche Hardwarenahen Infos zur Verfügung stellen :)
Falls jemand so etwas kennt. Gruß Oliver |
Re: RAM Bänke auslesen
Hallo,
*thread wieder nach oben zerr* :D Ich habe jetzt eine Möglichkeit gefunden mit wmi die auch unter w2k funktioniert. Seltsamerweise hatte der wmi browser den ich hatte mir bisher kein Ergebniss für die Klasse WIN32_PhysicalMemory zurückgeliefert. Dieser Beispiel hier funktioniert aber trotzdem (falls noch jemand so etwas sucht): ![]() Was ich an dem Code allerdings nicht verstehe sind die letzten 2 Querys der Procedure. Warum macht er die? Das gewünschte Ergebniss wird ja vorher schon zurückgeliefert? Vielleicht kann mir das jemand erklären :) Gruß Oliver
Delphi-Quellcode:
Procedure TForm1.GetMemBanks();
var // Objektreferenzen auf WMI Services: ISWbemServices; ObjectSet: ISWbemObjectSet; SObject: ISWbemObject; propSet : ISWbemPropertySet; SProp: ISWbemProperty; propEnum, Enum: IEnumVariant; tempObj: OleVariant; Count, Value: Cardinal; ListItem: TListItem; strValue: String; Column: TListColumn; strQuery: WideString; // Zähler für die Anzahl der Bänke intBanks: Integer; begin // Initialisieren intBanks := 1; // sicherstellen, dass alle Anforderungen beendet wurden SinkClasses.Cancel; // mit Namespace verbinden Services := Locator.ConnectServer('', 'root\CIMV2', '', '', '', '', 0, nil); // Abfrage starten ObjectSet := Services.ExecQuery('SELECT Capacity FROM Win32_PhysicalMemory', 'WQL', wbemFlagReturnImmediately, nil); // Enumeration übernehmen Enum := (ObjectSet._NewEnum) as IEnumVariant; // alle Einträge durchgehen while (Enum.Next(1, tempObj, Value) = S_OK) do begin SObject := IUnknown(tempObj) as SWBemObject; propSet := SObject.Properties_; propEnum := (propSet._NewEnum) as IEnumVariant; while (propEnum.Next(1, tempObj, Value) = S_OK) do begin SProp := IUnknown(tempObj) as SWBemProperty; strValue := ''; if VarIsNull(SProp.Get_Value) then strValue := '<empty>' else case SProp.CIMType of wbemCimtypeSint8, wbemCimtypeUint8, wbemCimtypeSint16, wbemCimtypeUint16, wbemCimtypeSint32, wbemCimtypeUint32, wbemCimtypeSint64: if VarIsArray(SProp.Get_Value) then begin if VarArrayHighBound(SProp.Get_Value, 1) > 0 then for Count := 1 to VarArrayHighBound(SProp.Get_Value, 1) do strValue := strValue + ' ' + IntToStr(SProp.Get_Value[Count]); end else strValue := IntToStr(SProp.Get_Value); wbemCimtypeReal32, wbemCimtypeReal64: strValue := FloatToStr(SProp.Get_Value); wbemCimtypeBoolean: if SProp.Get_Value then strValue := 'True' else strValue := 'False'; wbemCimtypeString, wbemCimtypeUint64: if VarIsArray(SProp.Get_Value) then begin if VarArrayHighBound(SProp.Get_Value, 1) > 0 then for Count := 1 to VarArrayHighBound(SProp.Get_Value, 1) do strValue := strValue + ' ' + SProp.Get_Value[Count]; end else strValue := SProp.Get_Value; wbemCimtypeDatetime: strValue := SProp.Get_Value; wbemCimtypeReference: begin strValue := SProp.Get_Value; // entfernt.... end; wbemCimtypeChar16: strValue := '<16-bit character>'; wbemCimtypeObject: strValue := '<CIM Object>'; else ShowMessage('Unknown type'); end; {case} if sProp.Name = 'Capacity' then begin Memo1.Lines.Add('MemBank' + IntToStr(intBanks) + ': ' + strValue); intBanks := intBanks +1; end; end; {while propEnum} end; {while Enum} strQuery := 'SELECT * FROM __InstanceCreationEvent within 5 WHERE TargetInstance' + ' ISA "' + 'Win32_PhysicalMemory' + '"'; Services.ExecNotificationQueryAsync(SinkClasses.DefaultInterface, strQuery, 'WQL', 0, nil, nil); strQuery := 'SELECT * FROM __InstanceDeletionEvent within 5 WHERE TargetInstance' + ' ISA "' + 'Win32_PhysicalMemory' + '"'; Services.ExecNotificationQueryAsync(SinkClasses.DefaultInterface, strQuery, 'WQL', 0, nil, nil); end; |
Re: RAM Bänke auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal dein Beispiel versucht umzusetzen und konnte dennoch nichts sehen.
Und meine eigene WMI-Klasse zeigt uch keine Werte zu Win32_PhysicalMemory an. Es wird zwar zu Win32_PhysicalMemory verwunden (da keine Verbingungsfehler auftritt), aber es scheint keine Instanzen zu geben. In dem angehängten Programm ist dein Code von oben drin, nur Locator := TSWbemLocator.Create(nil); wurde eingefügt (so wie ich es in meine Klasse verwende und soweit ich das sehe ist der restliche Code ähnlich Meinem) Die letzen Abfragen gehören nicht zur RAM-Bank-Erkennung ... die gehören wohl zur Abschluß-Bestätigung (oder sowas) von SinkClasses.Cancel; am Anfang |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz