Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Grafikspeicher auslesen (https://www.delphipraxis.net/116802-grafikspeicher-auslesen.html)

delphi_user14 6. Jul 2008 22:58


Grafikspeicher auslesen
 
Hallo!

Ich möchte eine Art System-Info Programm schreiben.

Dort möchte ich z.B. die Menge des Grafikspeichers anzeigen.

Nur leider fehlt mir die nötige Funktion zum Auslesen der Speichermenge.

Könnte mir bitte jemand einen Quellcode geben?

Danke im Vorraus!

hathor 7. Jul 2008 12:45

Re: Grafikspeicher auslesen
 
Mit WMI:

'Win32_VideoController','AdapterRAM'

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
  ActiveX, WbemScripting_TLB;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  aLoc: ISWbemLocator;
  aSrv: ISWbemServices;
  aObjSet: ISWbemObjectSet;
  pEnum: IEnumVARIANT;
  vOut: OleVariant;
  dwRetrieved: LongWord;
  hRes: HResult;
  cWQL, sWQL: string;
  st: TStringList;

implementation

{$R *.dfm}

function GetWMIstring (wmiHost, wmiClass, wmiProperty : string):string;
var // These are all needed for the WMI querying process
  Locator: ISWbemLocator;
  Services: ISWbemServices;
  SObject: ISWbemObject;
  ObjSet:  ISWbemObjectSet;
  SProp:   ISWbemProperty;
  Enum:    IEnumVariant;
  Value:   Cardinal;
  TempObj: OleVariant;
  SN: string;
begin
  try
  Locator := CoSWbemLocator.Create;
   Services := Locator.ConnectServer(wmiHost, 'root\cimv2', '', '', '','', 0, nil);
  ObjSet := Services.ExecQuery('SELECT * FROM '+wmiClass, 'WQL',
    wbemFlagReturnImmediately and wbemFlagForwardOnly , nil);
  Enum := (ObjSet._NewEnum) as IEnumVariant;
  while (Enum.Next(1, TempObj, Value) = S_OK) do
  begin
    SObject := IUnknown(tempObj) as ISWBemObject;
    SProp := SObject.Properties_.Item(wmiProperty, 0);
    if VarIsNull(SProp.Get_Value) then
      result := ''
    else
    begin
      SN := SProp.Get_Value;
      result := SN;
    end;
  end;
  except // Trap any exceptions (Not having WMI installed will cause one!)
   on exception do
    result := '';
   end;
end;


procedure TForm1.FormActivate(Sender: TObject);
var tmpstr : string;
begin
tmpstr := getWMIstring('','Win32_VideoController ','AdapterRAM');
  if tmpstr <> '' then Label1.caption:= tmpstr +' Bytes VideoRAM';
end;

end.

e-gon 1. Jun 2016 11:14

AW: Grafikspeicher auslesen
 
Hallo!

Sorry dass ich das alte Thema nochmal ausgrabe, aber ich habe beim Auslesen von Grafik-RAM >= 4 GB ein Problem. Ich bekomme immer -2080374784 zurück.

Das ist natürlich nicht verwunderlich, wenn man auf 32Bit-Basis ("Win32_VideoController") arbeitet. Doch scheint es kein "Win64_VideoController" oder sowas zu geben. Kennt jemand eine Möglichkeit dennoch größeren Grafikspeicher korrekt auszulesen?

Gruß
e-gon

himitsu 1. Jun 2016 14:47

AW: Grafikspeicher auslesen
 
Win32 ist quasi der API-Name und die API heißt auch unter 64 Bit noch Win32. (die API des Windows NT-Systems und die gab es schon von Anfang an auch mit 64 Bit)

https://msdn.microsoft.com/en-us/library/aa394512.aspx
win32_videocontroller.AdapterRAM > Data type: uint32
und -2080374784 aka $8000000 (2147483648) ist wohl der Fehlercode für "ist zu groß für mich"

Aber auf die Schnelle sah ich in den Klassen-Listen des MSDN auch nichts Besseres.

e-gon 1. Jun 2016 16:52

AW: Grafikspeicher auslesen
 
Hallo himitsu,

danke für die schnelle Antwort! Leider hat auch eine längliche Internet-Recherche keine brauchbaren Ergebnisse gebracht. Aber es kann doch nicht sein, dass noch niemand auf dieses Problem gestoßen ist!

Das Programm AIDA kann es jedenfalls korrekt auslesen, auch wenn mir das nicht so richtig was bringt...

Gruß
e-gon

himitsu 1. Jun 2016 17:02

AW: Grafikspeicher auslesen
 
WMI greift letzten Endes (meistens) auch nur auf irgendwelche APIs/Registryeinträge zu, welche man ganz bestimmt auch selber ansprechen/auslesen könnte.
* man muß die "nur" finden
* und eventuell gibt ab und an mal Problemchen mit "undokumentierten" APIs, die sich eventuell irgendwann ändern könnten

Neutral General 1. Jun 2016 17:58

AW: Grafikspeicher auslesen
 
Ohne einen Hauch von Ahnung zu haben: Hat DirectX vllt. nicht irgendwas in der Richtung?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf