Entwickler-Ecke

Windows API - Grafikkartenspeichermenge auslesen


Gahero - Sa 28.07.07 17:03
Titel: Grafikkartenspeichermenge auslesen
Hallo,

für mein Programm brauche ich eine Funktion, die mir den Grafikartenspeicher zurückgibt?
Gibts sowas oder lässt sich sowas proggen? Eine Funktion für den Arbeitsspeicher kann man schließlich auch einfach basteln.


Moderiert von user profile iconUGrohne: Topic aus Sonstiges (Delphi) verschoben am So 29.07.2007 um 10:14


Delete - Sa 28.07.07 17:23

Mit WMI:
CIMV2
Win32_VideoController
AdapterRAM


Gahero - Sa 28.07.07 17:38

Hab Nachsicht mit jmd der erst seid 1 Jahr delphi lernt und von dem was du da postets leider nichts versteht...^^
Hab bisschen über die Sachen gegoogelt, aber wie verbind ich das jetzt mit meinem Programm?


jaenicke - Sa 28.07.07 19:03

Hier steht gibts ein Beispiel zu dem Thema, das du natürlich ein wenig anpassen musst (du willst ja nur einen Wert auslesen und keine Liste):
http://www.delphipraxis.net/topic24332_mac+adressen+des+rechners+via+wmi+ermitteln.html


Gahero - Sa 28.07.07 21:20

Ok, hab den code erstma eingefügt. beid er Unit WbemScripting_TLB sagt er mir die ist nicht da. Verständlicherweise, denn die WMI Scripting library fehlt. Hab ich durch google rausbekommen. Nur wo lad ich das teil runter un diwe binde ich es dann ein?


jaenicke - Sa 28.07.07 21:29

Hier haben andere das selbe Problem und da stehen auch noch andere Sachen zu WMI.
http://www.delphipraxis.net/topic43931,20.html
Und hier ist die Datei auch angehängt, die fehlt:
http://www.delphipraxis.net/post77262.html


Delete - So 29.07.07 14:49


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
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''''''',''0nil);
  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.


Gahero - So 29.07.07 19:11

Danke funktioniert...