![]() |
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! |
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. |
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 |
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)
![]() 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. |
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 |
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 |
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 13:05 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