AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RAM Bänke auslesen

Offene Frage von "dbdeath74"
Ein Thema von dbdeath74 · begonnen am 30. Okt 2006 · letzter Beitrag vom 21. Nov 2006
Antwort Antwort
dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#1

RAM Bänke auslesen

  Alt 30. Okt 2006, 14:08
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
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: RAM Bänke auslesen

  Alt 30. Okt 2006, 14:24
Ich glaub über DMI geht das
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#3

Re: RAM Bänke auslesen

  Alt 30. Okt 2006, 15:20
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
  Mit Zitat antworten Zitat
dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#4

Re: RAM Bänke auslesen

  Alt 30. Okt 2006, 16:25
Ich nehme gerne auch kostenpflichtige Komponenten die mir solche Hardwarenahen Infos zur Verfügung stellen

Falls jemand so etwas kennt.

Gruß Oliver
  Mit Zitat antworten Zitat
dbdeath74

Registriert seit: 30. Aug 2005
53 Beiträge
 
#5

Re: RAM Bänke auslesen

  Alt 15. Nov 2006, 11:21
Hallo,

*thread wieder nach oben zerr*

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):
http://www.planet-source-code.com/vb...d=628&lngWId=7

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 = 'Capacitythen
        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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.049 Beiträge
 
Delphi 12 Athens
 
#6

Re: RAM Bänke auslesen

  Alt 21. Nov 2006, 19:55
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
Angehängte Dateien
Dateityp: zip win32_physicalmemory_899.zip (1,9 KB, 26x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz